神经网络学习之路:5-VGG16

本文介绍了VGG16网络结构,对比了与AlexNet的区别,并详细展示了如何在手势数据集上进行训练和预测,包括数据预处理、网络搭建、损失计算及模型训练的过程。
摘要由CSDN通过智能技术生成

VGG-16-Net卷积神经网络的理解并对手势数据集识别

论文:《Very Deep Convolutional Networks for Large-Scale Image Recognition》
链接:https://arxiv.org/abs/1409.1556
源码:https://github.com/DoubleYuanL/VGG-Net
附带数据集
VGG网络相比AlexNet网络的最主要改进是使用多个小的卷积核代替大卷积核使得网络层数得以更深,特征提取效果更加精细
VGG网络
本文根据VGG-16的设置条件进行网络搭建,由图可知,VGG16是由13层卷积加3层全连接构成16层网络,可以看到,卷积时所有卷积核大小都为3,1-2层卷积为64通道,3-4为128通道,5-6-7为256通道,8-9-10为512,11-12-13也为512通道,在每一个块之后加最大池化操作,池化都是ksize=2,strides=2。
一:简单介绍一下VGG16中的参数设置和AlexNet有哪些不同
第一点:将AlexNet卷积层中的(11x11,7x7,5x5)卷积核大小全部改为3x3的卷积核大小
第二点:使用连续的3x3卷积核代替大卷积核,使用2个或者3个连续的3x3卷积来代替11x11,7x7,5x5的卷积核。
第三点:因为使用了更小的卷积核,所以可以设置比AlexNet更深的网络结果,VGG在图像特征提取上更为出色。
本文依然使用64x64x3的数据集进行处理,因此参数我在VGG基础上减少了参数大小,以求符合这个小型数据集
二:详细代码操作过程
分为训练和测试两个步骤
1:训练
1.1:加载数据集
将h5文件类型的图片转化为numpy类型,进行处理

def load_dataset():
    train_dataset = h5py.File('datasets/train_signs.h5', "r")
    train_set_x_orig = np.array(train_dataset["train_set_x"][:]) 
    train_set_y_orig = np.array(train_dataset["train_set_y"][:]) 

    test_dataset = h5py.File('datasets/test_signs.h5', "r")
    test_set_x_orig = np.array(test_dataset["test_set_x"][:]) 
    test_set_y_orig = np.array(test_dataset["test_set_y"][:]) 

    classes = np.array(test_dataset["list_classes"][:]) 
    
    train_set_y_orig = train_set_y_orig.reshape((1, train_set_y_orig.shape[0]))
    test_set_y_orig = test_set_y_orig.reshape((1, test_set_y_orig.shape[0]))
    
    return train_set_x_orig, train_set_y_orig, test_set_x_orig, test_set_y_orig, classes

1.2:初始化数据集
将输入书进行归一化处理以及label标签进行one-hot处理

def init_dataset():
	X_train_orig , Y_train_orig , X_test_orig , Y_test_orig , classes = load_dataset()
	X_train = X_train_orig / 255.
	X_test = X_test_orig / 255.
	Y_train = convert_to_one_hot(Y_train_orig, 6).T
	Y_test = 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, classes

1.3:创建占位符

def create_placeholder(n_H0, n_W0, n_C0, n_y):
    X = tf.placeholder(tf
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DoubleYuanL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值