搭建模块化的神经网络模板

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

MNIST数据集下载地址:https://download.csdn.net/download/kdongyi/10666285

你可能感兴趣的:(搭建模块化的神经网络模板)