(1)前向传播算法
神经网络的前向传播算法主要构成部分:
1.神经网络的输入;
2.神经网络的连接结构;神经网络是由神经元(节点)构成的
3.每个神经元中的参数。
(2)TensorFlow随机数生成函数
函数名称 | 随机数分布 | 主要参数 |
tf.random_normal | 正态分布 | 平均值、标准差、取值类型 |
tf.truncated_normal | 正态分布,如果随机出来的值偏离平均值超过2个标准差,那么这个数将被重新随机 | 平均值、标准差、取值类型 |
tf.random_uniform | 均匀分布 | 最小、最大取值,取值类型 |
tf.random_gamma | Gamma分布 | 形状参数alpha、尺度参数beta、取值类型 |
(3)TensorFlow常数生成函数
函数名称 | 功能 | 样例 |
tf.zeros | 产生全0的数组 | tf.zeros([2,3],int32)-->[[0,0,0],[0,0,0]] |
tf.ones | 产生全1的数组 | tf.ones([2,3],int32)-->[[1,1,1],[1,1,1]] |
tf.fill | 产生一个全部为给定数字的数组 | tf.fill([2,3],9)-->[[9,9,9],[9,9,9]] |
tf.constant | 产生一个给定值的常量 | tf.constant([1,2,3])-->[1,2,3] |
(4)完整神经网络Python代码
1 # -*- coding: utf-8 -*- 2 3 import tensorflow as tf 4 from numpy.random import RandomState 5 6 #定义训练数据batch的大小 7 batch_size = 8 8 """ 9 #定义神经网络的参数 10 random_normal:随机生成函数, 11 随机数分布正太分布,2x3矩阵,标准差为1 12 随机数种子序号1,种子序号相同,产生的随机数相同 13 """ 14 w1=tf.Variable(tf.random_normal((2,3),stddev=1,seed=1)) 15 w2=tf.Variable(tf.random_normal((3,1),stddev=1,seed=1)) 16 17 """ 18 定义placeholder作为存放输入数据的地方 19 参数:数据类型,数据维度 20 """ 21 x=tf.placeholder(tf.float32, shape=(None,2), name="x-input") 22 y_=tf.placeholder(tf.float32, shape=(None,1), name="y-input") 23 24 """ 25 matmul():矩阵乘法函数 26 """ 27 a=tf.matmul(x,w1) 28 y=tf.matmul(a,w2) 29 30 """ 31 使用sigmoid函数将y转换为0-1之间的数值,转换后的y代表预测是正样本的概率,1-y代表预测是负样本的概率。 32 """ 33 y=tf.sigmoid(y) 34 35 #定义损失函数来刻画预测值与真实值的差距 36 cross_entropy=-tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,1e-10,1.0))+(1-y)*tf.log(tf.clip_by_value(1-y,1e-10,1.0))) 37 #定义学习率 38 learning_rate=0.001 39 #定义反向传播算法优化神经网络的参数 40 train_step=tf.train.AdamOptimizer(learning_rate).minimize(cross_entropy) 41 42 #通过随机数生成一个模拟数据集 43 rdm=RandomState(1) 44 dataset_size = 128 45 X=rdm.rand(dataset_size,2) 46 print(X) 47 #0表示负样本,1表示正样本 48 Y=[[int(x1+x2<1)] for (x1,x2) in X] 49 print(Y) 50 51 #创建一个会话来运行Tensorflow程序 52 with tf.Session() as sess: 53 init_op = tf.global_variables_initializer() 54 sess.run(init_op) 55 print(sess.run(w1)) 56 print(sess.run(w2)) 57 58 STEPS=5000 59 for i in range(STEPS): 60 #每次选取batch_size个样本进行训练 61 #%取余 62 #min()函数取最小值 63 start = (i*batch_size) % dataset_size 64 end = min(start+batch_size,dataset_size) 65 66 #通过选取的样本训练神经网络并更新参数 67 sess.run(train_step, feed_dict={x: X[start:end],y_ :Y[start:end]}) 68 if i%1000 == 0: 69 total_cross_entropy=sess.run(cross_entropy,feed_dict={x: X, y_: Y} ) 70 print("After %d training step(s), cross entropy on all data is %g" %(i, total_cross_entropy)) 71 print(sess.run(w1)) 72 print(sess.run(w2)) 73 74 75 76