搭建神经网络的步骤
到此为止,搭建神经网络我们已经全部学完,之后的程序会越来越复杂,所以我们要使用模块化的设计思想了。
神经网络程序中的三个模块:
-
generateds.py:定义训练所用的数据集,依据具体问题而定。
-
forward.py:前向传播的目的就是搭建网络,设计网络结构。在这个模块中,给出从输入到输出的数据通路,定义了前向传播过程,定义时要记住有两个参数,分别是输入及正则化参数。
def forward(x, regularizer): w= b= y= return y def get_weight(shape,regularizer): w=tf.Variable( )#给w赋初值 tf.add_to_collection(‘losses’,tf.contrib.layers.l2_regularizer(regularizer)(w))#定义损失函数时使用 return w def get_bias(shape): #shape就是某层中b的个数 b = tf.Variable( ) return b
-
backward.py:反向传播就是训练网络,优化网络参数。该模块定义了损失函数、反向传播过程。
def backward(): x = tf.placeholder( ) y_ = tf.placeholder( ) y = forward.forward(x,REGULARIZER)#利用forward模块复现前向传播设计的网络结构,计算求得y global_step = tf.Variable(0,trainable=False) #loss可以选择均方误差、自定义或者交叉熵 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)) #loss_ce=tf.reduce_mean(ce) #加入正则化:(可选) #loss = loss + tf.add_n(tf.get_collection(‘losses’)) #使用指数衰减学习率,动态计算学习率(可选) #learning_rate = tf.train.exponential_decay( LEARNING_RATE_BASE, global_step, 数据集总样本数/BATCH_SIZE, 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()
以上学习内容来自中国MOOC网课程:https://www.icourse163.org/course/PKU-1002536002