卷积神经网络结构

一、各层的意义

输入层:将每个像素代表一个特征点输入到网络中

卷积层:卷积运算的主要目的是使原信号特征增强,并降低噪音

降采样层:降低网络训练参数及模型的过拟合程度

全连接层:对生成的特征进行加权

二、全连接层与卷积层的参数比较

局部连接即每个卷积的输出只是与卷积核大小的部分有联系,而全连接层的每个输出都是全部输入的运算

三、为什么使用多通道卷积

 

四、池化

平均池化:对池化区域内的像素点取均值,这种方法得到的特征数据对背景信息更加敏感

最大池化:对池化区域内的所有像素点取最大值,这种方法得到的特征对纹理特征信息更加敏感

 

 通过池化,忽略不重要的特征,通过多通道卷积,提取不同的特征

 

#input_shape只在第一个卷积层加即可,padding:same表示边缘填充,valid表示边缘不填充
model.add(tf.keras.layers.Conv2D(filters = 64, kernel_size = (3, 3), input_shape = (32, 32, 3),activation = 'relu', padding = 'same' )
#每次有百分之三十的卷积核不参与调整,防止过拟合
model.add(tf.keras.layers.Dropout(rate = 0.3))

model.add(tf.keras.layers.MaxPooling2D(pool_size = (2, 2)))

 CIFAR10

 

import tensorflow as tf
import numpy as np

cifar10 = tf.keras.datasets.cifar10

(train_x, train_y), (test_x, test_y) = cifar10.load_data()

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Conv2D(32, (3, 3), input_shape = (32, 32, 3), activation = 'relu', padding = "same"))
model.add(tf.keras.layers.Dropout(0.3))

model.add(tf.keras.layers.MaxPooling2D((2, 2)))

model.add(tf.keras.layers.Flatten(input_shape = (32, 32)))
model.add(tf.keras.layers.Dense(10, activation = 'softmax'))


model.compile(optimizer = 'adam', loss =  "sparse_categorical_crossentropy", metrics = 'accuracy')
model_h = model.fit(train_x, train_y, epochs =  5, validation_split = 0.2, batch_size = 100, verbose = 2)
pred = model.predict_classes(test_x)
print(pred[0])

 

posted @ 2021-07-31 14:59  WTSRUVF  阅读(362)  评论(0编辑  收藏  举报