# -*- coding:utf-8 -*-
#
# LeNet model
import tensorflow as tf
import numpy as np
def 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 out
def 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 out
def 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
神经网络之LeNet网络结构(Python+TensorFlow)
最新推荐文章于 2022-05-06 10:29:04 发布