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()