ZF-Net卷积神经网络的理解并对手势数据集识别
论文:《Visualizing and Understanding Convolutional Networks 》
链接:https://arxiv.org/abs/1311.2901
ZF-Net 最大的贡献在于通过可视化技术揭示了神经网络到底在干什么。
网络结构还是AlexNet,通过可视化后,发现AlexNet中卷积核大小以及步幅stride的设置不合理,因此通过改变卷积核大小以及网络各层网络的参数,使其结果更加优秀。
源码:https://github.com/DoubleYuanL/ZF-Net.git
附带数据集
一:简单介绍一下ZF-Net中各层参数的设置和AlexNet哪里不同
第一点:将AlexNet卷积层_1中卷积核大小[11×11]stride = 4 变为[7x7]stride = 2
第二点:将第3,4,5,层卷基层中的通道数由384,384,256,变为512,1024,512
通过改变网络层中参数,在ImageNet top 5上的错误率由16.4%降到了 11.7%
本文依然使用64x64x3的数据集进行处理,因此参数我在AlexNet基础上减少了参数大小,以求符合这个小型数据集
二:详细代码操作过程
分为训练和测试两个步骤
1:训练
1.1:加载数据集
将h5文件类型的图片转化为numpy类型,进行处理
#加载数据集
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
1.2:初始化数据集
将输入书进行归一化处理以及label标签进行one-hot处理
#初始化数据集
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
1.3:创建占位符
#创建占位符
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")
Y = tf.placeholder(tf.float32, [None,n_y], name = "Y")
keep_prob = tf.