Tensorflow2(预课程)---7.3、cifar10分类-层方式-卷积神经网络-简化LeNet
Tensorflow2(预课程)---7.3、cifar10分类-层方式-卷积神经网络-简化LeNet
一、总结
一句话总结:
全连接层前面是两个卷积层,第一个是6@5*5,第二个是16@5*5,激活函数是sigmoid,没有批标准化,没有dropout
# 构建容器 model = tf.keras.Sequential() # 卷积层 一 model.add(tf.keras.layers.Conv2D(filters=6, kernel_size=(5, 5), padding='valid',input_shape=(32,32,3))) # 卷积层 # bn没有 model.add(tf.keras.layers.Activation('sigmoid')) # 激活层 model.add(tf.keras.layers.MaxPool2D(pool_size=(2, 2), strides=2, padding='valid')) # 池化层 # dropout层没有 # 卷积层 二 model.add(tf.keras.layers.Conv2D(filters=16, kernel_size=(5, 5), padding='valid',input_shape=(32,32,3))) # 卷积层 # bn没有 model.add(tf.keras.layers.Activation('sigmoid')) # 激活层 model.add(tf.keras.layers.MaxPool2D(pool_size=(2, 2), strides=2, padding='valid')) # 池化层 # dropout层没有 # 全连接层 model.add(tf.keras.layers.Flatten()) model.add(tf.keras.layers.Dense(256,activation='relu')) model.add(tf.keras.layers.Dense(128,activation='relu')) # 输出层 model.add(tf.keras.layers.Dense(10,activation='softmax')) # 模型的结构 model.summary()
二、cifar10分类-层方式-卷积神经网络-简化LeNet
博客对应课程的视频位置:
步骤
1、读取数据集
2、拆分数据集(拆分成训练数据集和测试数据集)
3、构建模型
4、训练模型
5、检验模型
需求
cifar10(物品分类)
该数据集共有60000张彩色图像,这些图像是32*32,分为10个类,每类6000张图。这里面有50000张用于训练,构成了5个训练批,每一批10000张图;另外10000用于测试,单独构成一批。测试批的数据里,取自10类中的每一类,每一类随机取1000张。抽剩下的就随机排列组成了训练批。注意一个训练批中的各类图像并不一定数量相同,总的来看训练批,每一类都有5000张图。
In [1]:
import pandas as pd
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
1、读取数据集
直接从tensorflow的dataset来读取数据集即可
In [2]:
(train_x, train_y), (test_x, test_y) = tf.keras.datasets.cifar10.load_data()
print(train_x.shape, train_y.shape)
这是32*32的彩色图,rgb三个通道如何处理呢
In [3]:
plt.imshow(train_x[0])
plt.show()
In [4]:
plt.figure()
plt.imshow(train_x[1])
plt.figure()
plt.imshow(train_x[2])
plt.show()
In [5]:
print(test_y)
In [6]:
# 像素值 RGB
np.max(train_x[0])
Out[6]:
2、拆分数据集(拆分成训练数据集和测试数据集)
上一步做了拆分数据集的工作
In [7]:
# 图片数据如何归一化
# 直接除255即可
train_x = train_x/255.0
test_x = test_x/255.0
In [8]:
# 像素值 RGB
np.max(train_x[0])
Out[8]:
In [9]:
train_y=train_y.flatten()
test_y=test_y.flatten()
train_y = tf.one_hot(train_y, depth=10)
test_y = tf.one_hot(test_y, depth=10)
print(test_y.shape)
3、构建模型
应该构建一个怎么样的模型:
In [10]:
# 构建容器
model = tf.keras.Sequential()
# 卷积层 一
model.add(tf.keras.layers.Conv2D(filters=6, kernel_size=(5, 5), padding='valid',input_shape=(32,32,3))) # 卷积层
# bn没有
model.add(tf.keras.layers.Activation('sigmoid')) # 激活层
model.add(tf.keras.layers.MaxPool2D(pool_size=(2, 2), strides=2, padding='valid')) # 池化层
# dropout层没有
# 卷积层 二
model.add(tf.keras.layers.Conv2D(filters=16, kernel_size=(5, 5), padding='valid',input_shape=(32,32,3))) # 卷积层
# bn没有
model.add(tf.keras.layers.Activation('sigmoid')) # 激活层
model.add(tf.keras.layers.MaxPool2D(pool_size=(2, 2), strides=2, padding='valid')) # 池化层
# dropout层没有
# 全连接层
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(256,activation='relu'))
model.add(tf.keras.layers.Dense(128,activation='relu'))
# 输出层
model.add(tf.keras.layers.Dense(10,activation