神经网络解决步骤--Tensorflow实战google深度学习框架

神经网络解决分类问题的4个步骤

1.提取问题中实体的特征向量作为神经网络的输入(构建输入);

2.定义神经网络的结构,并定义如何从神经网络的输入到输出。这个过程是神经网络前向传播的过程(定义神经网络的结构)。

3.通过训练数据来调整神经网络中参数的取值,这就是训练神经网络的过程(反向传播算法)。

4.使用训练好的神经网络来预测未知的数据(测试数据)。

前向传播算法:

神经元是构建神经网络的最小单元,每个神经元也可以称为节点。神经网络的前向传播算法可以通过tf.matmul函数实现。

反向传播算法

在神经网络优化算法中,最常用的方法是反向传播算法,在tensorflow中通过tf.train.AdamOptimizer()实现,例如train_step = tf.train.AdamOptimizer(learning_rate).minimize(cross_entropy)。

Tensorflow提供了placeholder机制用于提供输入数据。placeholder相当于定义了一个位置,这个位置中的数据在程序运行时在指定。在placeholder定义时,这个位置上上的数据类型是需要指定的,同时placeholder的类型也是不可以改变的。Placeholder中数据的维度可以根据数据推导出,所以不一定要给出。在会话中执行时,需要提供一个feed_dict来指定x的取值。Feed_dict是一个字典,字典中需要给出每个用到的placeholder的取值。

训练神经网络可以分为3个步骤:

1.定义神经网络的结构和前向传播算法的结果

2.定义损失函数以及选择反向传播算法优化的算法

3.生成会话并且在训练数据集上反复运行反向传播优化算法。

下面给出了一个完整的程序来训练神经网络解决二分类问题:

[python]  view plain  copy
  1. import tensorflow as tf  
  2. #通过Numpy工具包模拟数据集  
  3. from numpy.random import RandomState  
  4.   
  5. batch_size=8#训练数据batch的大小  
  6.   
  7. #定义神经网络的参数  
  8. w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))  
  9. w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))  
  10.   
  11. #  
  12. x=tf.placeholder(tf.float32,shape=(None,2),name="x_input")  
  13. y_=tf.placeholder(tf.float32,shape=(None,1),name="y_input")  
  14.   
  15. #定义神经网络前向传播的过程  
  16. a=tf.matmul(x,w1)  
  17. y=tf.matmul(a,w2)  
  18.   
  19. #定义损失熵和反向传播算法  
  20. cross_entropy=-tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,1e-10,1.0)))  
  21. train_step=tf.train.AdamOptimizer(0.001).minimize(cross_entropy)  
  22.   
  23. #通过随机数生成一个模拟数据集  
  24. rdm=RandomState(1)  
  25. dataset_size=128  
  26. X=rdm.rand(dataset_size,2)  
  27.   
  28. #定义规则来给出样本的标签。所有x1+x2<1的样例都认为是正样本而其他的为负样本。1表示正样本;0表示负样本  
  29. Y=[[int(x1+x2<1)] for (x1,x2) in X]  
  30.       
  31. with tf.Session() as sess:  
  32.     #初始化参数  
  33.     init_op=tf.global_variables_initializer()  
  34.     sess.run(init_op)  
  35.     print(sess.run(w1))  
  36.     print(sess.run(w2))  
  37.       
  38.     STEPS=5000#设定训练的次数  
  39.     for i in range(STEPS):  
  40.         #每次选取batch_size个样本进行训练  
  41.         start=(i*batch_size)%dataset_size  
  42.         end=min(start+batch_size,dataset_size)  
  43.           
  44.         #通过选取的样本训练神经网络并更新参数  
  45.         sess.run(train_step,feed_dict={x:X[start:end],y_:Y[start:end]})  
  46.         if i % 1000==0:  
  47.             #每隔一段时间计算在所有数据集上的交叉熵并输出  
  48.             total_cross_entropy=sess.run(cross_entropy,feed_dict={x:X,y_:Y})  
  49.             print("After %d training step(s), cross entropy on all data is %g"%(i,total_cross_entropy))  
  50.               
  51.     print(sess.run(w1))  
  52.     print(sess.run(w2))  

猜你喜欢

转载自blog.csdn.net/qq_31813549/article/details/79708940