1.前向传播就是搭建网络,设计网络结构(forward.py)
前向传播网络结构:
#前向传播网络结构
def forword(x, regularizer):
w=
b=
y=
return y
定义权重函数:
#定义权重函数
def get_weight(shape, regularizer):
w = tf.Variable( )
#tf.add_to_collection: 将元素tf.contrib.layers.l2_regularizer(regularizer)(w)添加到列表losses中
#tf.contrib.layers.l2_regularizer表示l2正则化
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()
MNIST数据集下载地址:https://download.csdn.net/download/kdongyi/10666285
本人简书文章地址:https://www.jianshu.com/u/3dbb0292f6a4