当前位置:网站首页>四、卷积神经网络(Convolution Neural Networks)
四、卷积神经网络(Convolution Neural Networks)
2022-06-25 07:56:00 【beyond谚语】
一、CNN(Convolution Neural Networks)
卷积神经网络基本思想:识别物体的特征,来进行判断物体
卷积Convolution:过滤器filter中的数值与图片像素值对应相乘再相加,6 * 6卷积一次(步数为1)变成4 * 4
Max Pooling:对卷积之后的4 * 4图像,分区选取最大值(2*2选取),变成 2 * 2;
Max Pooling作用是增强特征,减少数据
Ⅰ卷积
原图
竖直过滤器最终效果
垂直过滤器最终效果
ⅡMax Pooling
Max Pooling之后尺寸减小为原来的一半
ⅢCNN卷积神经网络就是卷积+Max Pooling
二、全连接和卷积网络比较
传统的全连接网络
全连接网络 loss: 0.2400 - acc: 0.9113
from tensorflow import keras
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
fashion_mnist = keras.datasets.fashion_mnist
(train_images,train_labels),(test_images,test_labels) = fashion_mnist.load_data()
model = keras.Sequential()
model.add(keras.layers.Flatten(input_shape=(28,28)))
model.add(keras.layers.Dense(128,activation=tf.nn.relu))
model.add(keras.layers.Dense(10,activation=tf.nn.softmax))
train_images_y = train_images/255
#model.compile(optimizer=tf.optimizers.Adam(),loss=tf.losses.sparse_categorical_crossentropy,metrics=['accuracy'])
#optimizer="adam",loss="sparse_categorical_crossentropy",metrics=[`'accuracy']
model.compile(optimizer="adam",loss="sparse_categorical_crossentropy",metrics=['accuracy'])
model.fit(train_images_y,train_labels,epochs=10)
""" Epoch 1/10 60000/60000 [==============================] - 2s 38us/sample - loss: 0.4977 - acc: 0.8257 Epoch 2/10 60000/60000 [==============================] - 2s 41us/sample - loss: 0.3779 - acc: 0.8637 Epoch 3/10 60000/60000 [==============================] - 2s 39us/sample - loss: 0.3390 - acc: 0.8762 Epoch 4/10 60000/60000 [==============================] - 2s 39us/sample - loss: 0.3158 - acc: 0.8847 Epoch 5/10 60000/60000 [==============================] - 2s 39us/sample - loss: 0.2971 - acc: 0.8899 Epoch 6/10 60000/60000 [==============================] - 2s 39us/sample - loss: 0.2829 - acc: 0.8963 Epoch 7/10 60000/60000 [==============================] - 2s 39us/sample - loss: 0.2702 - acc: 0.8999 Epoch 8/10 60000/60000 [==============================] - 2s 38us/sample - loss: 0.2584 - acc: 0.9035 Epoch 9/10 60000/60000 [==============================] - 2s 39us/sample - loss: 0.2507 - acc: 0.9059 Epoch 10/10 60000/60000 [==============================] - 2s 39us/sample - loss: 0.2400 - acc: 0.9113 """
卷积神经网络
卷积神经网络 loss: 0.0964 - acc: 0.9640
from tensorflow import keras
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
fashion_mnist = keras.datasets.fashion_mnist
(train_images,train_labels),(test_images,test_labels) = fashion_mnist.load_data()
model = keras.Sequential()
model.add(keras.layers.Conv2D(64,(3,3),activation='relu',input_shape=(28,28,1)))
model.add(keras.layers.MaxPooling2D(2,2))
model.add(keras.layers.Conv2D(64,(3,3),activation='relu',input_shape=(28,28,1)))
model.add(keras.layers.MaxPooling2D(2,2))
model.add(keras.layers.Flatten(input_shape=(28,28)))
model.add(keras.layers.Dense(128,activation=tf.nn.relu))
model.add(keras.layers.Dense(10,activation=tf.nn.softmax))
train_images_y = train_images/255
#model.compile(optimizer=tf.optimizers.Adam(),loss=tf.losses.sparse_categorical_crossentropy,metrics=['accuracy'])
#optimizer="adam",loss="sparse_categorical_crossentropy",metrics=[`'accuracy']
model.compile(optimizer="adam",loss="sparse_categorical_crossentropy",metrics=['accuracy'])
model.fit(train_images_y.reshape(-1,28,28,1),train_labels,epochs=10)
""" Epoch 1/10 60000/60000 [==============================] - 43s 710us/sample - loss: 0.4380 - acc: 0.8408 Epoch 2/10 60000/60000 [==============================] - 41s 682us/sample - loss: 0.2923 - acc: 0.8920 Epoch 3/10 60000/60000 [==============================] - 41s 680us/sample - loss: 0.2485 - acc: 0.9082 Epoch 4/10 60000/60000 [==============================] - 41s 681us/sample - loss: 0.2164 - acc: 0.9190 Epoch 5/10 60000/60000 [==============================] - 41s 681us/sample - loss: 0.1886 - acc: 0.9297 Epoch 6/10 60000/60000 [==============================] - 41s 680us/sample - loss: 0.1654 - acc: 0.9376 Epoch 7/10 60000/60000 [==============================] - 41s 686us/sample - loss: 0.1462 - acc: 0.9446 Epoch 8/10 60000/60000 [==============================] - 41s 681us/sample - loss: 0.1254 - acc: 0.9525 Epoch 9/10 60000/60000 [==============================] - 42s 706us/sample - loss: 0.1115 - acc: 0.9579 Epoch 10/10 60000/60000 [==============================] - 47s 780us/sample - loss: 0.0964 - acc: 0.9640 """
很明显,CNN要比传统的全连接网络正确率高,损失函数值小,但训练时间长
三、分析卷积神经网络
在卷积神经网络训练的基础上,看下网络结构
七层!!!
Output Shape
原始图像像素为2828,这里的过滤器为33的卷积核,故
第一层图像变成了26*26,64为64个卷积核(过滤器),经过一次卷积之后,一张图像就变成了64张图像了
第二层,将图像变为原来的四分之一,长宽各减半,变成了13 * 13
第三层,卷积层,卷积核3 * 3,去掉2个像素点,变成11 * 11的图像
第四层,将图像变为原来的四分之一,长宽各减半,变成了5 * 5
第五层,flatten将所有像素进行展平,5 * 5 * 64=1600
Param参数
第一层,33的卷积核(过滤器)有64个,33*64=576,每一个都还有一个bias,故576+64=640个参数
第二层没有调整参数,只是变化了尺寸,故参数为0
第三层,接第一层的576个参数,与本身的64个卷积核连接,576 * 64=36864,再加上每一个的bias,36864 + 64=36928
第四层没有调整参数,只是变化了尺寸,故参数为0
第五层,展平操作,就是把所有的像素点值都展成一行,没有调整参数,只是尺寸变化了而已,故参数为0
第六层,代码设置的就是128个神经元,故与上一层进行全连接操作,1600 * 128=204800,再加上每一个都有一个bias,故204800 + 128 = 204928
第七层,就是10分类而已,上一层128个神经元与这10个神经元全排列,128 * 10 =1280,在加上每个的bias,1280+10=1290
model.summary()
""" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d_2 (Conv2D) (None, 26, 26, 64) 640 _________________________________________________________________ max_pooling2d_2 (MaxPooling2 (None, 13, 13, 64) 0 _________________________________________________________________ conv2d_3 (Conv2D) (None, 11, 11, 64) 36928 _________________________________________________________________ max_pooling2d_3 (MaxPooling2 (None, 5, 5, 64) 0 _________________________________________________________________ flatten_2 (Flatten) (None, 1600) 0 _________________________________________________________________ dense_4 (Dense) (None, 128) 204928 _________________________________________________________________ dense_5 (Dense) (None, 10) 1290 ================================================================= Total params: 243,786 Trainable params: 243,786 Non-trainable params: 0 _________________________________________________________________ """
四、详细查看各层网络
对测试集中第一张图像进行七层网络分析
test_images_y = test_images/255#因为前面训练的时候对训练图像进行了归一化操作,故测试的时候也需要对测试图像进行归一化操作
layer_outputs = [layer.output for layer in model.layers]
activation_model = tf.keras.models.Model(inputs=model.input,outputs=layer_outputs)
pred = activation_model.predict(test_images_y[0].reshape(1,28,28,1))#这里对第一张图像进行测试
pred
预测的结果包括七层网络的结果
len(pred)
""" 7 """
pred[第几层网络0-6一共七层][0,:,:,第几个卷积核1-64一共64个卷积核]
第一层网络,卷积层的shape
pred[0].shape
""" (1, 26, 26, 64) """
第一个0表示第一层,卷积层
第二个0是画图用的,必须为0
:,:表示展示图片的所有信息
第一个1表示第一个卷积核(过滤器)
pred[0][0,:,:,1]
第一层—卷积层
看下第一层的使用第一个卷积核(共64个卷积核),生成的图像
plt.imshow(pred[0][0,:,:,1])
看下第一层的使用第二个卷积核(共64个卷积核),生成的图像
plt.imshow(pred[0][0,:,:,2])
第二层—Max Polling层
看下第二层的使用第一个卷积核(共64个卷积核),生成的图像
plt.imshow(pred[1][0,:,:,1])
看下第二层的使用第二个卷积核(共64个卷积核),生成的图像
plt.imshow(pred[1][0,:,:,2])
总结
卷积层26*26,到Max Polling层变成了13 * 13
且Max Polling层物体的特征更加明显了
边栏推荐
猜你喜欢
Data preprocessing: discrete feature coding method
Measure the current temperature
How to calculate the distance between texts: WMD
Getting to know the generation confrontation network (11) -- using pytoch to build wgan to generate handwritten digits
GPU calculation
C language: count the number of characters, numbers and spaces
[operation tutorial] how does the tsingsee Qingxi video platform import the old database into the new database?
Index analysis of DEMATEL model
Bluecmsv1.6- code audit
What are the indicators of entropy weight TOPSIS method?
随机推荐
【操作教程】TSINGSEE青犀视频平台如何将旧数据库导入到新数据库?
Discrimination of configuration, software configuration items and software configuration management items
How to become a software testing expert? From 3K to 17k a month, what have I done?
UEFI: repair efi/gpt bootloader
Beam search and five optimization methods
atguigu----18-组件
[operation tutorial] how does the tsingsee Qingxi video platform import the old database into the new database?
第十五周作业
OpenFOAM:底层
With the beauty of technology enabled design, vivo cooperates with well-known art institutes to create the "industry university research" plan
What are the indicators of DEA?
Sharepoint:sharepoint 2013 with SP1 easy installation
各种同步学习笔记
QSS 不同风格的按钮
配置、软件配置项、软件配置管理项辨析
Hyper-v:Hyper-v 第 1 代或第 2 代虚拟机
Is it safe to open an account for stocks on the Internet? Can the securities account be used by others?
Is the securities account given by Qiantang education business school safe? Can I open an account?
Is there no risk in the security of new bonds
浏览器查看当前页面所有的监听事件