大田县建设局官方网站,中国有没有开源社区,做网站哪个好,wordpress 搜索文章一、CNN(Convolution Neural Networks)
卷积神经网络基本思想#xff1a;识别物体的特征#xff0c;来进行判断物体 卷积Convolution#xff1a;过滤器filter中的数值与图片像素值对应相乘再相加#xff0c;6 * 6卷积一次(步数为1)变成4 * 4 Max Pooling#xff1a;对卷积…一、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 npfashion_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,activationtf.nn.relu))
model.add(keras.layers.Dense(10,activationtf.nn.softmax))train_images_y train_images/255
#model.compile(optimizertf.optimizers.Adam(),losstf.losses.sparse_categorical_crossentropy,metrics[accuracy])
#optimizeradam,losssparse_categorical_crossentropy,metrics[accuracy]
model.compile(optimizeradam,losssparse_categorical_crossentropy,metrics[accuracy])model.fit(train_images_y,train_labels,epochs10)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 npfashion_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),activationrelu,input_shape(28,28,1)))
model.add(keras.layers.MaxPooling2D(2,2))
model.add(keras.layers.Conv2D(64,(3,3),activationrelu,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,activationtf.nn.relu))
model.add(keras.layers.Dense(10,activationtf.nn.softmax))train_images_y train_images/255
#model.compile(optimizertf.optimizers.Adam(),losstf.losses.sparse_categorical_crossentropy,metrics[accuracy])
#optimizeradam,losssparse_categorical_crossentropy,metrics[accuracy]
model.compile(optimizeradam,losssparse_categorical_crossentropy,metrics[accuracy])model.fit(train_images_y.reshape(-1,28,28,1),train_labels,epochs10)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
原始图像像素为28 * 28这里的过滤器为3 * 3的卷积核故 第一层图像变成了26 * 2664为64个卷积核(过滤器)经过一次卷积之后一张图像就变成了64张图像了 第二层将图像变为原来的四分之一长宽各减半变成了13 * 13 第三层卷积层卷积核3 * 3去掉2个像素点变成11 * 11的图像 第四层将图像变为原来的四分之一长宽各减半变成了5 * 5 第五层flatten将所有像素进行展平5 * 5 * 641600
Param参数
第一层33的卷积核(过滤器)有64个33*64576每一个都还有一个bias故57664640个参数 第二层没有调整参数只是变化了尺寸故参数为0 第三层接第一层的576个参数与本身的64个卷积核连接576 * 6436864再加上每一个的bias36864 6436928 第四层没有调整参数只是变化了尺寸故参数为0 第五层展平操作就是把所有的像素点值都展成一行没有调整参数只是尺寸变化了而已故参数为0 第六层代码设置的就是128个神经元故与上一层进行全连接操作1600 * 128204800再加上每一个都有一个bias故204800 128 204928 第七层就是10分类而已上一层128个神经元与这10个神经元全排列128 * 10 1280在加上每个的bias1280101290
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(inputsmodel.input,outputslayer_outputs)
pred activation_model.predict(test_images_y[0].reshape(1,28,28,1))#这里对第一张图像进行测试
pred预测的结果包括七层网络的结果
len(pred)7pred[第几层网络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层物体的特征更加明显了