Rbf神经网络使用Tensorflow实现
本文用tensorflow实现rbf神经网络:
主要内容:
1、rbf神经网络实现步骤
2、tensorflow实现rbf神经网络分类
**
1、rbf神经网络实现步骤
**
(1)定义隐藏层神经元个数为hidden=20(神经元个数是随便选的),选择每个神经元对应的中心点center,中心点的选择方法:将输入样本x的的每个特征的最大值max与最小值min的差值分为hidden份(max - min)/hidden,每一个中心点的坐标就是:
# 求x所有特征的最大值与最小值
t_max = np.max(x, axis=0)
t_min = np.min(x, axis=0)
# 将最大值和最小值分为self.hidden份,平均分配中心
center = []
for i in range(self.hidden):center.append(i * ((t_max - t_min)/self.hidden) + t_min)
center = np.array(center)
(2)使用径向基函数计算隐藏层的值
(3)使用softmax计算输出层的值
**
2、tensorflow实现rbf神经网络分类
**
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import tensorflow as tf
from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import LabelEncoder
# 由于我下的tensorflow是2.0版本,下面这句话为了防止在2.0下使用1.0版本报错
tf.compat.v1.disable_eager_execution()class RbfClassification:def __init__(self, learning_rate=0.01, hidden=10):# 学习率self.lr = learning_rate# 隐藏层神经元个数self.hidden = hiddendef center_mat(self, x):# 求x所有特征的最大值与最小值t_max = np.max(x, axis=0)t_min = np.min(x, axis=0)# 将最大值和最小值分为self.hidden份,平均分配中心center = []for i in range(self.hidden):center.append(i * ((t_max - t_min)/self.hidden) + t_min)center = np.array(center)# 求解||x-c||2,将结果存储到mat中mat = []for i in x:temp = []for j in center - i:temp.append(np.dot(j, j.T))mat.append(temp)return np.array(mat)def run(self, x, y):# 1、定义输入和输出self.x = tf.compat.v1.placeholder(tf.float32, [None, x.shape[1]])self.y = tf.compat.v1.placeholder(tf.float32, [None, y.shape[1]])self.mat = tf.compat.v1.placeholder(tf.float32, [None, self.hidden])# 2、构建输入层到隐藏层beta = tf.Variable(tf.random.normal([1, self.hidden])) # 径向基函数为e^-beta*(||x-c||^2)L1 = tf.math.exp(self.mat*-beta) # 使用径向基函数计算隐藏层的值# 3、构建隐藏层到输出层weight = tf.Variable(tf.random.normal([self.hidden, self.y.shape[1]])) # 权值basic = tf.Variable(tf.random.normal([1, self.y.shape[1]])) # 偏置值output = tf.matmul(L1, weight) + basic # 输出值# 4、损失函数loss = tf.reduce_mean(tf.compat.v1.nn.softmax_cross_entropy_with_logits(labels=self.y, logits=output))# 5、梯度下降法predict = tf.compat.v1.train.GradientDescentOptimizer(self.lr).minimize(loss)with tf.compat.v1.Session() as sess:# 初始化变量sess.run(tf.compat.v1.global_variables_initializer())# 求mat,存储到m1m1 = self.center_mat(x)for step in range(20):sess.run(predict, feed_dict={self.x:x, self.y:y, self.mat:m1})result = sess.run([loss, output], feed_dict={self.x:x, self.y:y, self.mat:m1})# 输出每一步的损失函数loss的值print(f"step:{step} loss:{result[0]}")# 循环500次后,输出output的值print(f"output:{result[1]}")# 计算精确度acc = tf.reduce_mean(tf.cast(tf.equal(tf.argmax(self.y, 1), tf.argmax(result[1], 1)), tf.float32))re = sess.run(acc, feed_dict={self.x:x, self.y:y})print(f"准确率:{re}")
使用数据验证程序正确性
def main():# 制作数据x = []y = []for i in range(2):for _ in range(20):a = np.random.normal(i + 5, 0.2)b = np.random.normal(i, 0.2)x.append([a, b])y.append([i])x = np.array(x)# 将y转变为onehot编码,并转换为数组类型oht = OneHotEncoder()y = oht.fit_transform(y).toarray()# 调用自己写的rbf程序lc = RbfClassification(0.2, 20)result = lc.run(x, y)if __name__ == "__main__":main()
程序结果:
step:0 loss:0.009847460314631462
step:1 loss:0.0063354759477078915
step:2 loss:0.004663033410906792
step:3 loss:0.00367681123316288
step:4 loss:0.003026006743311882
step:5 loss:0.002564833965152502
step:6 loss:0.0022214394994080067
step:7 loss:0.001956184161826968
step:8 loss:0.0017454007174819708
step:9 loss:0.0015740934759378433
step:10 loss:0.0014322480419650674
step:11 loss:0.0013130262959748507
step:12 loss:0.0012114696437492967
step:13 loss:0.0011240066960453987
step:14 loss:0.0010479569900780916
step:15 loss:0.0009812603238970041
step:16 loss:0.0009223271044902503
step:17 loss:0.000869911746121943
step:18 loss:0.0008229954401031137
step:19 loss:0.0007807918009348214
output:[[ -5.6905594 -23.674717 ][ -8.617398 -38.798042 ][ -4.1444187 -15.849449 ][ -3.6620772 -13.654512 ][ -8.246327 -37.815224 ][ -4.8025513 -19.621326 ][ -4.6801014 -19.308613 ][ -4.043401 -12.66901 ][ -3.275519 -11.271512 ][ -8.364632 -36.719036 ][ -3.449597 -12.38932 ][ -4.537184 -18.557596 ][ -3.8763468 -14.292524 ][ -4.3595047 -16.981241 ][ -4.385331 -17.0463 ][ -3.290766 -11.16351 ][ -6.2468643 -27.3551 ][ -4.4771547 -18.061419 ][ -7.7329607 -33.897655 ][ -4.5932465 -18.70145 ][ -4.0903406 2.3125944 ][-33.720146 8.19898 ][ -6.0941734 2.4650843 ][ -7.911108 8.0174885 ][-14.664846 9.801966 ][ -3.646073 1.3106902 ][ -3.3612907 0.48594096][-26.83491 9.89762 ][ -5.46649 5.226462 ][-17.203758 11.449418 ][ -5.746872 5.3967757 ][ -7.02769 6.4736304 ][ -4.9688196 4.3449683 ][ -8.87957 8.680702 ][ -9.566407 9.235068 ][-40.259476 6.399553 ][ -9.986042 7.9442725 ][ -7.6550283 7.5912905 ][ -5.986595 5.7204523 ][-11.090441 9.66671 ]]
准确率:1.0
Rbf神经网络使用Tensorflow实现相关推荐
- 【机器学习】径向基(RBF)神经网络的tensorflow实现
[机器学习]径向基(RBF)神经网络的tensorflow实现 一.tensorflow简介 1.1.基础概念 1.1.1计算图 1.1.2 Session会话 1.2.应用流程 二.RBF神经网络的 ...
- TensorFlow学习--函数逼近(RBF神经网络)
目录 主体代码参照: 1.RBF网络相关知识 知识概述 2.K-means聚类最优k值的选取 2.1手肘法:SSE(sum of the squared errors,误差平方和) 2.2 轮廓系数法 ...
- 傻瓜攻略(六)——MATLAB实现RBF神经网络
径向基函数(Radial Basis Function,RBF)神经网络是一种传统的神经网络,于1988年首次被提出.1989年,Jackson论证了RBF神经网络对非线性连续函数的一致逼近性能. R ...
- 径向基函数神经网络_基于RBF神经网络的网络安全态势感知预测研究
点击上方"网络空间安全学术期刊"关注我们 基于RBF神经网络的网络安全态势 感知预测研究 钱建, 李思宇 摘要 针对网络安全态势的感知问题,结合巨龙山和者磨山风电场的运行情况,文章 ...
- RBF神经网络——直接看公式,本质上就是非线性变换后的线性变化(RBF神经网络的思想是将低维空间非线性不可分问题转换成高维空间线性可分问题)...
Deeplearning Algorithms tutorial 谷歌的人工智能位于全球前列,在图像识别.语音识别.无人驾驶等技术上都已经落地.而百度实质意义上扛起了国内的人工智能的大旗,覆盖无人驾驶 ...
- 径向基RBF(radial basis function)函数、RBF神经网络、 反推(back-stepping)控制
文章目录 1. 什么是径向基函数 1. 高斯径向基函数 2. 反演S型函数 3. 拟多二次函数 2. 正则化径向基神经网络 3. 基于RBF网络逼近的自适应控制 1. 问题描述 2. RBF 网络原理 ...
- 2021-03-09 Matlab RBF神经网络及其实例
Matlab RBF神经网络及其实例 RBF神经网络和BP神经网络的区别就在于训练方法上面:RBF的隐含层与输入层之间的连接权值不是随机确定的,是有一种固定算式的.下面以精确型RBF为例. 假设每个样 ...
- matlab RBF 神经网络拟合
(1)newrb() https://www.mathworks.com/help/deeplearning/ref/newrb.html 该函数可以用来设计一个近似径向基网络(approximate ...
- rbf神经网络_基于RBF神经网络的监督控制(09)
1.RBF监督控制 基于RBF神经网络的监督控制系统,其控制思想是:初始阶段采用PD反馈控制,然后过渡到神经网络控制.在控制过程中,如出现较大的误差,则PD控制起主导作用,神经网络控制起调节作用. 图 ...
- 神经网络 mse一直不变_干货RBF神经网络在财务报表舞弊识别中的应用
学习→创造→分享一直是数行科技坚持的原则,今天小数就来为大家分享一下RBF神经网络及其在财务报表舞弊识别中的应用. ------------------ 什么是RBF神经网络? RBF神经网 ...
最新文章
- android 比较两个list,比较两个List的内容是否相等
- JVM_04 字符串常量池(详解intern( ))
- Struts2标签-checkbox只读属性设置
- [py]py常用模块小结
- python解码和编码的区别_python基础小知识,is和==的区别,编码和解码
- 打造全自动的NOD32升级服务器
- SG90舵机驱动程序
- 使用ps 制作gif 动图
- OpenCv中Threshold函数详解
- 银行客户流失分析预测
- linux iq测试题,ayawawa测试题
- OCSNG inventory | 介绍
- 大前端工程师进阶之路,Node全栈为前端带来更多可能
- 弗吉尼亚理工大学计算机科学,弗吉尼亚理工大学计算机科学研究生专业.pdf
- 我去扒了杜蕾斯的微博
- C语言 =(按位与后赋值)^=(按位异或后赋值) |=(按位或后赋值)
- 【c】三角形图形输入 6*11 看懂这一个以后打印图形信手nian来
- 我的Qt作品(7)使用Qt+OpenCV实现图像轮廓提取,再用三阶贝塞尔曲线拟合成光滑线条/多边形拟合
- linux账户密码介绍
- animation unity 速度_animator下怎么控制指定动画的播放速度