TensorFlow基础(二)实现神经网络

(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         

猜你喜欢

转载自www.cnblogs.com/reaptomorrow-flydream/p/9102352.html
今日推荐