神经网络学习之路:2-AlexNet

本文深入探讨AlexNet卷积神经网络,介绍其结构和工作原理。通过分析《ImageNet Classification with Deep Convolutional Neural Networks》论文,详细讲解网络组成,包括5个卷积层、3个池化层和全连接层。此外,还提供了实现AlexNet的源码链接,以及针对小规模数据集的训练和预测步骤。
摘要由CSDN通过智能技术生成

AlexNet卷积神经网络的理解并对手势数据集识别

论文:《ImageNet Classification with Deep Convolutional Neural Networks》
链接:https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
AlexNet卷积神经网络结构
图为AlexNet网络结构
源码:https://github.com/DoubleYuanL/AlexNet.git
附带数据集
一:简单介绍一下AlexNet网结构
由结构图可知:
AlexNet卷积神经网络组成:5个卷积+三个池化+3个全连接(包含输出层)
更加细化一下:
输入图像数据[-1, 227, 227, 3]
卷积层_1:卷积核大小[11,11], stride = 4,数量96,以及激活函数relu,(原始AlexNet有lrn层,但是会减慢训练速度,代码里有写,但被我屏蔽了),采用有效卷积(VALID)
经过第一层卷积 结果为[-1, 55, 55, 96] 计算公式: output-size = (input_size - kernel_size + 2*padding)/stride + 1
池化层_1:采用最大池化 max_pooling kernel_size[3,3], stride = 2, 计算公式:width = (width - kernel_size)/stride + 1 长也是一样
池化结果:[-1, 27, 27, 96]
卷积层_2:卷积核大小[5,5], stride = 2,数量256, 以及激活函数relu, 以及lrn层,采用SAME卷积。
经过第二层卷积 结果为[-1, 27, 27, 256]
池化层_2:采用最大池化 max_pooling kernel_size[3,3], stride = 2,
池化结果:[-1, 13, 13, 96]
卷积层_3:卷积核大小[3,3], stride = 2,数量384, 以及激活函数relu, 采用SAME卷积。
卷积层_4:卷积核大小[3,3], stride = 2,数量384, 以及激活函数relu, 采用SAME卷积。
卷积层_5:卷积核大小[3,3], stride = 2,数量256, 以及激活函数relu, 采用SAME卷积。
因为三层都是SAME卷积,所以H和W不变,仅仅通道数改变
卷积结果:[-1, 13, 13, 256]
池化层_3:采用最大池化 max_pooling kernel_size[3,3], stride = 2,
池化结果:[-1, 6, 6, 256]
全连接层_1:生成4096个节点
全连接层_2:生成4096个节点
全连接层_3:生成分类数量的节点(这里为1000)
由于AlexNet对227,227像素的图片进行处理,并进行1000分类,我的电脑不支持,则采用64,64,3的图片,进行6分类,并且在代码里改变了全连接层节点的数量来适应这个小型数据集。
二:详细代码操作过程
分为训练和测试两个步骤
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"][:]) # your train set features
    train_set_y_orig = np.array(train_dataset["train_set_y"][:]) # your train set labels

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

    classes = np.array(test_dataset["list_classes"][:]) # the list of 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(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

DoubleYuanL

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

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

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

打赏作者

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

抵扣说明:

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

余额充值