TensorFlow—part3
基于中国大学生MOOC视频TensorFlow入门实操课程第三章卷积神经元网络(CNN),以及自己遇到的一些问题
慕课视频链接:https://www.icourse163.org/learn/youdao-1460578162?tid=1461280442#/learn/announce
前言
我理解的卷积神经元网络作用就是对使用过滤器图片进行特征化处理,使某种特征明显,使用MaxPooling增强特性,减少数据。在实际中不是所有图片都在图片正中间,会存在便宜旋转,会影响模型的准确性。
一、辅助理解
卷积(Convolution)
计算过程;原像素和过滤器对应位置相乘再相加,过滤器在原图片上不断进行移动卷积。过滤器大小和原图片大小不一定匹配,可能卷积后的输出会丢失像素。不同过滤器会有不同效果,留下的特征也不相同。
MaxPooling
计算过程:取2*2,再去其中最大值。作用:增强图像特征,减少数据。
二、课程代码
import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt
#####lesson3卷积神经元网络
fashion_mnist =keras.datasets.fashion_mnist
(train_images,train_lables),(test_images,test_lables) = fashion_mnist.load_data()
#lesson3_2
model = keras.Sequential([
keras.layers.Conv2D(64,(3,3),activation='relu',input_shape=(28,28,1)), #64个3*3过滤器,输入值28*28应该通道灰度值
keras.layers.MaxPooling2D(2,2), #MaxPooling增强特征,减少数据
keras.layers.Conv2D(64,(3,3),activation='relu'),
keras.layers.MaxPooling2D(2,2),
keras.layers.Flatten(),
keras.layers.Dense(128,activation=tf.nn.relu),
keras.layers.Dense(10,activation=tf.nn.softmax)
])
train_images_scaled = train_images/255
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics='accuracy')
model.fit(train_images_scaled.reshape(-1,28,28,1),train_lables,epochs=5)
#和第二章的时候也碰到了,不过这次直接使用train_images_scaled.reshape(-1,28,28,1)来重建
#lesson3_3
model.summary()
#_________________________________________________________________
#Layer (type) Output Shape Param #
#=================================================================
#conv2d (Conv2D) (None, 26, 26, 64) 640 #过滤器长宽各去掉了2个像素,64个过滤器,param=(3*3+1)*64
#_________________________________________________________________
#max_pooling2d (MaxPooling2D) (None, 13, 13, 64) 0 #缩减为原来的1/4,长宽都变为原来的一半
#_________________________________________________________________
#conv2d_1 (Conv2D) (None, 11, 11, 64) 36928 #过滤器长宽各去掉了2个像素,param=3*3*64+1)*64
#_________________________________________________________________
#_________________________________________________________________
#max_pooling2d_1 (MaxPooling2 (None, 5, 5, 64) 0
#_________________________________________________________________
#flatten (Flatten) (None, 1600) 0 #5*5*64=1600
#_________________________________________________________________
#dense (Dense) (None, 128) 204928
#_________________________________________________________________
#dense_1 (Dense) (None, 10) 1290
#=================================================================
layers_outputs = [keras.layers.output for layer in model.layers]
activation_model = keras.models.Model(inputs = model.input,outputs = layers_outputs)
pred = activation_model.predict(train_images[0].reshape( 1, 28, 28, 1))
#print(pred)
#print(pred[0].shape)
#pred[x][0,:,:,y] x代表层数下标,第一个:代表所有行,第二个:代表所有列,y代表过滤器下标
#plt.imshow(pred[0][0,:,:,2])
#plt.show()
本次环境为pycharm
总结
这部分内容还是比较简单的,视频也讲的很形象生动,还是要继续冲!!!!