没有合适的资源?快使用搜索试试~ 我知道了~
Tensorflow卷积神经网络详解
需积分: 5 2 下载量 76 浏览量
2023-05-08
11:17:36
上传
评论 1
收藏 1.55MB DOCX 举报
温馨提示
试读
31页
传统神经网络的一个局限是它对于图像平移变换--即一个猫在右上角的图片与猫在中心的图片是不同对待的。卷积神经网络Convolutional neural networks (CNNs)用于处理这种问题 。 因为CNN可以处理图像的平移,它被认为很有用,而且CNN架构被认为是目标识别/检测最选进的技术。 这一章我们学习如下知识: •CNN的工作细节 •CNN如何改时传统神经网络的缺点 •卷积和池化对于图像平移的影响 •如何用python实现 CNN
资源推荐
资源详情
资源评论
卷积神经网络
传统神经网络的一个局限是它对于图像平移变换--即一个猫在右上角的图
片与猫在中心的图片是不同对待的。卷积神经网络 Convolutional neural
networks (CNNs)用于处理这种问题 。
因为 CNN 可以处理图像的平移,它被认为很有用,而且 CNN 架构被
认为是目标识别/检测最选进的技术。
这一章我们学习如下知识:
•
CNN 的工作细节
•
CNN 如何改时传统神经网络的缺点
•
卷积和池化对于图像平移的影响
•
如何用 python 实现 CNN
要理解为什么需要CNN,我们从一个例子开始。假如我们要分类一张图像里
是否有垂直的线 (可能是告诉我们是否有 1 存在)。 为了简单起见,我们假定图
像是 5 × 5 像素大小的。垂直的线(数字 1)可以用一些方法表示 :
我们也可以检查 MNIST 数据集里数字 1 的不同表示方法。一张数字 1 的图片见
图 9-1。
图 9-1. 与 数 字 1 对 应 的 图 像 的 像 素
在图里,越红的地方就是我们越常写的地方,模糊的地方是比较少写的
地方。中间的像素最红,因为人们最常在那个地方写,不管他们写 1 的角度
如何--垂直或向左或向右斜。在下面的一节,你会注意到神经网络预测不会
准确当图像平移一些像素时。在后一节,我们会理解 CNN 如何解决图像平移
的问题。
传统神经网络的问题
刚才提到的情况,传统的神经网络突出图像为 1 仅当中间的像素被突出而
别的像素不突出时(因为许多人在中间突出像素)。
要更好的理解这个问题 ,我们看一下我们在第7章写的代码 (见 “
http://www.aluoyun.cn/preview/Chapter9-CNN/
issue with
traditional NN.ipynb” ):
1.
下载数据集并提取训练集和测试集:
from keras.datasets import mnist
import matplotlib.pyplot as plt
%matplotlib inline
# load (downloaded
if
needed) the
MNIST
dataset
(X_train, y_train),
(X_test, y_test)
=
mnist.load_data()
# plot 4 images as gray scale
plt.subplot(221)
plt.imshow(X_train[0], cmap=plt.get_cmap('gray'))
plt.subplot(222)
plt.imshow(X_train[1], cmap=plt.get_cmap('gray'))
plt.subplot(223)
plt.imshow(X_train[2], cmap=plt.get_cmap('gray'))
plt.subplot(224)
plt.imshow(X_train[3], cmap=plt.get_cmap('gray'))
# show the plot
plt.show()
2.
导入相关的包:
import numpy as np
from keras.datasets import mnist
from keras.models import
Sequential
from keras.layers import Dense
from keras.layers import Dropout
from keras.layers
import Flatten
from keras.layers.convolutional import Conv2D
from keras.layers.convolutional import MaxPooling2D
from keras.utils
import np_utils
from keras import backend as
K
3.
获取训练集里的数字 1:
X_train1 = X_train[y_train==1]
4.
变改形状变归一化数据集:
num_pixels = X_train.shape[1] * X_train.shape[2]
X_train =
X_train.reshape(X_train.shape[0],num_pixels
).astype('float32')
X_test = X_test.reshape(X_test.shape[0],num_pixels).
astype('float32')
X_train = X_train
/
255
X_test = X_test
/
255
5.
独热编码标签:
y_train =
np_utils.to_categorical(y_train)
y_test =
np_utils.to_categorical(y_test)
num_classes =
y_train.shape[1]
6.
构建模型并运行它:
model = Sequential()
model.add(Dense(1000, input_dim=num_pixels, activation='relu'))
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam',
metrics=[''accuracy'])
model.fit(X_train, y_train, validation_data=(X_test, y_test),
epochs=5, batch_size=1024, verbose=1)
我们绘制平均 1 的标签:
pic=np.zeros((28,28))
pic2=np.copy(pic)
for
i
in range(X_train1.shape[0]):
pic2=X_train1[i,:,:]
pic=pic+pic2
pic=(pic/X_train1.shape[0])
plt.imshow(pic)
图 9-2 显示结果。
图 9-2. 平 均 1 图像
情况 1
在这种情况,新的图像被创建 (图 9-3)通过原始图像向左平移一个像素:
for
i
in range(pic.shape[0]):
if
i<20:
pic[:,i]=pic[:,i+1]
plt.imshow(pic)
图 9-3. 平 均 1 图像向左平移一个像素
我们继续并用构建的模型预测图 9-3 的标签:
model.predict(pic.reshape(1,784))
我们看到错误的预测为 8 作为输出。
情况 2
不平移原始平均 1 图像创建新的图像 (图 9-4):
pic=np.zeros((28,28))
pic2=np.copy(pic)
for
i
in range(X_train1.shape[0]):
pic2=X_train1[i,:,:]
pic=pic+pic2
pic=(pic/X_train1.shape[0])
plt.imshow(pic)
剩余30页未读,继续阅读
资源评论
lishaoan77
- 粉丝: 154
- 资源: 25
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功