A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

学习tensorflow先要了解它编码的流程,在此简要描述一下其流程,所有的TensorFlow训练神经网络的过程大致可以分为以下三个过程:

1、定义神经网络的结构和前向传播的输出结果。

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

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

无论神经网络结构如何变化,这三个步骤是不变的。当然,每一步里面涉及到的方法和函数是比较复杂的,真正学好神经网络不止要了解大概,还要洞彻其细节部分。目前市面上的书籍讲的普遍比较浅显,稍微深入一些的,大多晦涩难懂。学习的过程最好是书籍和论文相结合,书籍以了解全貌,论文来深入细节,二者相辅相成,方可事半功倍。

下面以一段程序来简单体会一下这个过程(摘自TensorFlow实战深度学习框架):




  • import tensorflow as tf



  • from numpy.random import RandomState



  • #定义训练数据batch的大小



  • batch_size=8



  • #定义神经网络的参数



  • w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))



  • w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))







  • x=tf.placeholder(tf.float32,shape=(None,2),name='x-input')



  • y_=tf.placeholder(tf.float32,shape=(None,1),name='y-input')







  • #1、定义前向传播过程(省略激活函数)



  • a=tf.matmul(x,w1)



  • y=tf.matmul(a,w2)        #y即是输出结果







  • #2、定义损失函数和反向传播的算法



  • cross_entropy=-tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,1e-10,1.0)))



  • train_step=tf.train.AdamOptimizer(0.001).minimize(cross_entropy)







  • #通过随机数生成一个模拟数据集



  • rdm=RandomState(1)



  • dataset_size=128



  • X=rdm.rand(dataset_size,2)







  • #定义规则给出样本标签x1+x2<1被认为是正样本,其他为负样本



  • Y=[[int(x1+x2<1)] for (x1,x2) in X]







  • #创建一个会话运行tensorflow样例程序



  • with tf.Session() as sess:



  •     #初始化所有变量



  •     init_op = tf.global_variables_initializer()



  •     sess.run(init_op)



  •     print( sess.run(w1))



  •     print(sess.run(w2))



  •     #设定训练轮数



  •     STEPS = 5000



  •     for i in range(STEPS):



  •         #每次选取batch_size个样本进行训练



  •         start=(i*batch_size)%dataset_size



  •         end = min(start+batch_size,dataset_size)



  •         #3、通过选取的样本训练神经网络并更新参数



  •         sess.run(train_step,feed_dict={x:X[start:end],y_:Y[start:end]})



  •         #计算每隔一段时间在所有数据上的交叉商并输出,(可以设定阈值,满足条件则停止训练



  •         if i % 1000 ==0:



  •             total_cross_entropy=sess.run(cross_entropy,feed_dict={x:X,y_:Y})



  •             print("after %d training step (s),cross entropy on all data is %g" % (i,total_cross_entropy))







  •     print( sess.run(w1)



  •     print(sess.run(w2))


       由以上代码可以看出,大体过程是与之前的描述一致的,但是却有一些小步骤,这些小步骤可以看作是每一个大步骤之前的预处理部分。下面以一张流程图来描述这个过程:


1 个回复

倒序浏览
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马