一、各层的意义
输入层:将每个像素代表一个特征点输入到网络中
卷积层:卷积运算的主要目的是使原信号特征增强,并降低噪音
降采样层:降低网络训练参数及模型的过拟合程度
全连接层:对生成的特征进行加权
二、全连接层与卷积层的参数比较
局部连接即每个卷积的输出只是与卷积核大小的部分有联系,而全连接层的每个输出都是全部输入的运算
三、为什么使用多通道卷积
四、池化
平均池化:对池化区域内的像素点取均值,这种方法得到的特征数据对背景信息更加敏感
最大池化:对池化区域内的所有像素点取最大值,这种方法得到的特征对纹理特征信息更加敏感
通过池化,忽略不重要的特征,通过多通道卷积,提取不同的特征
#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])