Keras实战(一)

什么是感受野?

局部感受野(Local Receptive Field)是指在神经网络中,每个神经元只与输入图像的一小部分区域相连,这个区域就称为局部感受野。

简单来说,局部感受野就像是我们看待事物时的一个小窗口,我们只能通过这个小窗口看到一部分场景,而不能看到整个场景。同样,在神经网络中,每个神经元也只能处理输入图像的一小部分信息,而不能处理整个图像的信息。

举一个例子,假设我们有一个包含许多像素点的图像,每个像素点都可以表示为红、绿、蓝三种颜色的组合。现在有一个神经元,它只能处理三个像素点,即它的局部感受野只包含这三个像素点。当我们输入一张图像时,只有这三个像素点会传递给这个神经元进行处理,而其他像素点则不会对这个神经元的输出产生影响。

通过将输入图像划分成许多小的区域,并将每个神经元与这些小的区域相连,可以使得神经网络能够更好地理解和处理图像中的局部特征,从而提高图像分类、目标检测等任务的准确性。

keras minst

python 复制代码
from keras.models import Sequential
from keras.layers.core import Dense, Activation, Dropout
from keras.optimizers import SGD, RMSprop, Adam
import numpy as np
from keras.datasets import mnist
from keras.utils import np_utils  # todo: 用于处理numpy的工具函数
from keras import regularizers  # todo: 正则化

# todo:手写识别

# todo:重复性设置-作用是可以每次复现实验结果
np.random.seed(1671)

# todo:网络和训练
NB_EPOCH = 20  # todo:200次迭代-200次重复训练
BATCH_SIZE = 128  # todo: 指的是一次性处理数据的数量,批数
NB_CLASSSE = 10  # todo: 代表输出结果的种类数量
OPTIMIZER = SGD()  # todo: 优化器,随机梯度下降
OPTIMIZER2 = RMSprop()  # todo: 优化器2
OPTIMIZER3 = Adam()  # todo: 优化器3
N_HIDDEN = 128  # todo: 隐藏层中神经元的个数
VALIDATION_SPLIT = 0.2  # todo:训练集中用作验证集的比例
VERBOSE = 1  # todo: 是否打印日志,每一个epoch以进度条等信息展示
DROPOUT = 0.3  # todo: 随机杀死30%的神经元
# todo: 读取数据
# todo:(X_train, y_train)是训练数据,其中X_train是训练图像,y_train是训练标签。
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# todo:X_train 是 60 000 行 28×28 的数据,变形为 60000×784
RESHAPE = 784
# todo: 数据
x_train = x_train.reshape(60000, RESHAPE)
x_test = x_test.reshape(10000, RESHAPE)
# todo: 标签 NumPy库将X_train的数据类型转换为'float32'
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
# todo: 像素值从0到255的范围缩放到0到1之间,以便于数学运算和优化
x_train = x_train / 255
x_test = x_test / 255
# todo:X_test.shape[0]返回的是X_test数组的第一维的大小,也就是测试样本的数量。
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')
# todo:这行代码是在Python中使用Keras库中的np_utils.to_categorical函数,
#  将y_train中的整数标签转换为二进制类别矩阵。NB_CLASSES是分类的数量,
#  也就是你的任务中有多少不同的标签。对于每一个样本,
#  该函数会创建一个长度为NB_CLASSES的二进制向量,对应标签的位置为1,其他位置为0。
#  这种格式对于多分类问题是非常有用的,因为它允许我们使用像softmax这样的函数来计算每个类别的概率。
y_train = np_utils.to_categorical(y_train, NB_CLASSSE)
y_test = np_utils.to_categorical(y_test, NB_CLASSSE)
# todo:定义模型-正则化层通常应用在卷积层或全连接层之后,在激活函数层之前
model = Sequential()
model.add(Dense(N_HIDDEN, kernel_regularizer=regularizers.l2(0.01), input_shape=(RESHAPE,)))
# todo:添加隐藏层
model.add(Activation('relu'))
model.add(Dropout(DROPOUT))
model.add(Dense(N_HIDDEN))
model.add(Activation('relu'))
model.add(Dropout(DROPOUT))
model.add(Dense(NB_CLASSSE))
model.add(Activation('softmax'))
# todo:调用模型(model)的summary方法。这个方法会打印出模型的架构信息,包括每一层的名称、输出形状、参数数量等。
model.summary()
# todo:模型的编译 损失函数,优化器 评估指标 metrics=['accuracy']则设置评估模型性能的标准,这里使用准确率。
model.compile(loss='categorical_crossentropy', optimizer=OPTIMIZER3, metrics=['accuracy'])
# todo: 模型编译好之后就是训练 fit()
history = model.fit(x_train, y_train, batch_size=BATCH_SIZE, epochs=NB_EPOCH, verbose=VERBOSE,
                    validation_split=VALIDATION_SPLIT)
# todo: 测试
score = model.evaluate(x_test, y_test, verbose=VERBOSE)
print('Test Score:', score[0])  # todo: 损失值loss
print('Test accuracy:', score[1])  # todo: 准确率acc

# todo: 保存模型
model.save('my_model.h5')
# 加载模型
# model = load_model('my_model.h5')
# todo;200 epoch
# todo: 未加隐藏层之前是92.30%
# todo: 加隐藏层之后是97.6%
# todo: 加Dropout之后是97.7%
# todo: 更换优化器2之后是97.6%
# todo: 更换优化器3之后是97.9%
# todo: 加了正则化L2(0.01)之后是97%

为什么要共享权重与偏执?

因为卷积核目的是(例如在3x3的感受野)使得在中心像素与周围其他像素之间的关联关系上,能够在窗口移动的过程中,保留这种模式规则。

感受野(卷积核)->产生一个特征图。

相关推荐
xidianjiapei00111 分钟前
LLM架构解析:循环神经网络(RNN)(第三部分)—— 从基础原理到实践应用的深度探索
人工智能·rnn·深度学习·神经网络·机器学习·llm
司南OpenCompass14 分钟前
司南评测集社区 3 月上新一览!
人工智能·大模型评测·司南评测·司南评测集社区
扫地的小何尚32 分钟前
使用NVIDIA NIM微服务加速科学文献综述
开发语言·数据结构·人工智能·深度学习·微服务·云原生·架构
阿里云云原生34 分钟前
南京大学与阿里云联合启动人工智能人才培养合作计划,已将通义灵码引入软件学院课程体系
人工智能·阿里云·云计算
GoMaxAi1 小时前
智能体(Agent)系统源码解析:AI 自动化办公的未来
人工智能·unity·自动化
Java樱木1 小时前
哈尔滨工业大学:大模型时代的具身智能
人工智能
weixin_599073942 小时前
第P10周:Pytorch实现车牌识别
人工智能·pytorch·深度学习
袖手蹲2 小时前
宏碁笔记本电脑擎7PRO搭载的 NVIDIA RTX 5080 显卡安装pytorch
人工智能·pytorch·电脑
coding随想2 小时前
Ollama本地服务无法通过IP访问的终极解决方案
网络·人工智能·网络协议·tcp/ip
TGITCIC2 小时前
7B斗671B:扩散模型能否颠覆自回归霸权?
人工智能·自回归·扩散·deepseek·大模型自回归·大模型扩散