神经网络之LeNet网络结构(Python+TensorFlow)

来源:互联网 发布:免费英语网络课程 编辑:程序博客网 时间:2024/05/19 03:19

# -*- coding:utf-8 -*-## LeNet modelimport tensorflow as tfimport numpy as npdef get_weight(shape, name):    return tf.Variable(tf.truncated_normal(shape, stddev=0.1), name=name)def get_bias(shape, name):    return tf.Variable(tf.constant(0.0, shape=shape), name=name)def conv_layer(x, ks, out_units, name):    with tf.variable_scope(name):        in_units = x.get_shape().as_list()[-1]        filt = get_weight([ks,ks,in_units,out_units], name='weight')        bias = get_bias([out_units], name='bias')        out  = tf.nn.relu(tf.nn.bias_add(tf.nn.conv2d(x, filt, [1,1,1,1], padding='VALID'), bias))    return outdef fc_layer(x, out_units, name):    with tf.variable_scope(name):        in_units = np.prod(x.get_shape().as_list()[1:])        x_flat = tf.reshape(x, [-1, in_units])        weight = get_weight([in_units,out_units], name='weight')        biases = get_bias([out_units], name='bias')        out    = tf.nn.bias_add(tf.matmul(x_flat, weight), biases)    return outdef lenet(images, num_class=10, keep_prob=0.5):    # conv1    conv1 = conv_layer(images, ks=5, out_units=32, name='C1')    # pool2    pool2 = tf.nn.max_pool(conv1, ksize=[1,2,2,1], strides=[1,2,2,1], padding='SAME', name='S2')    # conv3    conv3 = conv_layer(pool2, ks=5, out_units=64, name='C3')    # pool4    pool4 = tf.nn.max_pool(conv3, ksize=[1,2,2,1], strides=[1,2,2,1], padding='SAME', name='S4')    # conv5    conv5 = conv_layer(pool4, ks=5, out_units=120, name='C5')    # fc6    fc6 = fc_layer(conv5, out_units=84, name='F6')    fc6_drop = tf.nn.dropout(fc6, keep_prob)    # fc7    out = fc_layer(fc6_drop, out_units=num_class, name='F7')    return out


原创粉丝点击