CSDN文章地址:https://blog.csdn.net/kdongyi
1.前向传播就是搭建网络,设计网络结构(forward.py)
前向传播网络结构:
#前向传播网络结构def forword(x, regularizer): w= b= y= return y
定义权重函数:
#定义权重函数def get_weight(shape, regularizer): w = tf.Variable( ) tf.add_to_collection('losses', tf.contrib.layers.l2_regularizer(regularizer)(w)) return w
定义偏置量:
#定义偏置量:def get_bias(shape): b = tf.Variable( ) return b
2.反向传播就是训练网络,优化网络参数(backword.py)
def backword( ): x = tf.placeholder( ) y_ = tf.placeholder( ) y = forward.forword(x, REGULARIZER) #前向传播网络结构,计算求y global_step = tf.Variable(0, trainable = False) #定义轮数计数器global_step loss = #定义损失函数,可以选用以下均方误差、交叉熵、自定义,表示计算出来的y与y_的差距 #loss可以是(如果使用均方误差): y与y_的差距(loss_mse) = tf.reduce_mean(tf.square(y-y_)) #也可以是(如果使用交叉熵,则用下面两行代码): ce = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y,labels=tf.argmax(y_, 1)) y与y_的差距(cem) = tf.reduce_mean(ce) #加入正则化后(如果使用正则化) loss = y与y_的差距 + tf.add_n(tf.get_collection('losses')) #指数衰减学习率(如果使用指数衰减学习率,动态计算学习率) learning_rate = tf.train.exponential_decay(LEARNING_RATE_BASE, global_step, 数据集总样本数 / BATCH_SASE, LEARNING_RATE_DECAY, staircase=True) #训练过程 train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss,global_step=global_step) #如果用滑动平均: ema = tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY,global_step) ema_op = ema.apply(tf.trainable_variables()) with tf.control_dependencies([train_step, ema_op]): train_op = tf.no_op(name='train') with tf.Session() as sess: init_op = tf.global_variables_initializer() sess.run(init_op) for i in range(STEPS): sess.run(train_step, feed_dict={x: , y_: }) if i % 轮数 ==0: print( )
#判断运行的是否为主文件
#判断运行的是否为主文件if __name__=='__main__': backward()
作者:清晨的光明
链接:https://www.jianshu.com/p/087cd0a8acbf
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦