搭建模块化的神经网络

搭建模块化的神经网络八股:

前向传播就是搭建网络,设计网络结构(forward.py

一般新建一个forward.py文件来描述前向传播过程,一般包括下面几个函数:

def forward(x, regularizer):
    """
    定义了前向传播过程
    :param x: 输入x
    :param regularizer: 正则化权重
    :return: 返回y
    """
	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

反向传播就是训练网络,优化网络参数(backward.py

同样,一般新建一个backward.py文件来描述反向传播过程,一般包含以下内容:

def backward():
    x = tf.placehoder(  )
    y_ = tf.placehoder(  )
    y = forward.forward(x, REGULARIZER)
    global_step = tf.Variable(0, trainable=False)
    loss =

正则化过程

loss可以是y与y_的差距(loss_mse)=tf.reduce_mean(tf.square(y-y_))

也可以是:
ce=tf.nn.sparse_softmax_cross_entropy_with_logits(logite=y, labels=tf.argmax(y_, 1))

y与y_的差距(cem) = tf.reduce_mean(ce)

加入正则化后:

loss = y与y_的差距 + tf.add_n(tf.get_colection('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()) # 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()

好的,以下是一个基于TensorFlow搭建模块化神经网络的示例代码: ```python import tensorflow as tf # 定义输入层 def create_input_layer(input_size): return tf.placeholder(tf.float32, shape=[None, input_size], name='input') # 定义隐层 def create_hidden_layer(input_layer, num_neurons, activation): input_size = int(input_layer.shape[1]) stddev = 2.0 / tf.sqrt(input_size + num_neurons) weights = tf.Variable(tf.truncated_normal([input_size, num_neurons], stddev=stddev)) biases = tf.Variable(tf.zeros([num_neurons])) layer = tf.matmul(input_layer, weights) + biases if activation: layer = activation(layer) return layer # 定义输出层 def create_output_layer(input_layer, num_classes): input_size = int(input_layer.shape[1]) stddev = 2.0 / tf.sqrt(input_size + num_classes) weights = tf.Variable(tf.truncated_normal([input_size, num_classes], stddev=stddev)) biases = tf.Variable(tf.zeros([num_classes])) layer = tf.matmul(input_layer, weights) + biases return layer # 定义模型 def build_model(input_size, hidden_layers, num_classes): input_layer = create_input_layer(input_size) hidden_layer = input_layer for num_neurons, activation in hidden_layers: hidden_layer = create_hidden_layer(hidden_layer, num_neurons, activation) output_layer = create_output_layer(hidden_layer, num_classes) return input_layer, output_layer # 测试 input_size = 784 hidden_layers = [(256, tf.nn.relu), (128, tf.nn.relu)] num_classes = 10 input_layer, output_layer = build_model(input_size, hidden_layers, num_classes) print(input_layer) print(output_layer) ``` 这个示例代码定义了一个三层神经网络,包括一个输入层、两个隐层和一个输出层。其中,输入层和输出层都比较简单,而隐层则是根据输入层的大小、神经元个数和激活函数来创建的。同时,这个代码还支持模型的构建和测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值