LeNet卷积神经网络的理解并对手势数据集识别
LeNet:《Gradient-Based Learning Applied to Document Recognition》
论文链接:http://yann.lecun.com/exdb/publis/pdf/lecun-98.pdf
LeNet卷积神经网络结构
源码:https://github.com/DoubleYuanL/LeNet5.git
附带数据集
由结构图可知:
LeNet卷积神经网络组成:2个卷积+2个下采样(池化)+3个全连接层组成。
更加细化一些:
卷积层:卷积核大小(5x5),步幅stride = 1 ,以及激活函数,两层卷积卷积核大小,步幅,激活函数都相同。
下采样:采用(2x2)的输入域,步幅stride = 2 (采用平均池化)
全连接层:(也就是BP网络)
全连接层一:生成120个节点
全连接层二:生成84个节点
全连接层三:生成分类数量的节点
详细代码操作过程:
训练:
1:加载数据集
将h5文件类型的图片数据转化为numpy类型,进行处理。
#load_dataset
def load_dataset():
X_train_orig , Y_train_orig , X_test_orig , Y_test_orig , classes = cnn_utils.load_dataset()
return X_train_orig , Y_train_orig , X_test_orig , Y_test_orig
2:初始化数据集
将输入数据进行归一化处理以及label标签进行one-hot处理
#init_dataset
def init_dataset(X_train_orig , Y_train_orig , X_test_orig , Y_test_orig ):
X_train = X_train_orig/255.
X_test = X_test_orig/255.
Y_train = cnn_utils.convert_to_one_hot(Y_train_orig, 6).T
Y_test = cnn_utils.convert_to_one_hot(Y_test_orig, 6).T
print ("number of training examples = " + str(X_train.shape[0]))
print ("number of test examples = " + str(X_test.shape[0]))
print ("X_train shape: " + str(X_train.shape))
print ("Y_train shape: " + str(Y_train.shape))
print ("X_test shape: " + str(X_test.shape))
print ("Y_test shape: " + str(Y_test.shape))
return X_train, Y_train, X_test, Y_test
3:创建占位符
#create_placeholder
def create_placeholder(n_H0, n_W0, n_C0, n_y):
X = tf.placeholder(tf.float32, [None, n_H0, n_W0, n_C0], name = "X")
# X = tf.placeholder(tf.float32, [None, n_H0*n_W0*n_C0], name = "X")
Y = tf.placeholder(tf.float32, [None,n_y], name = "Y")
keep_prob = tf.pla