卷积神经网络CNN
1 卷积网络格式
1.1.输入层。
输入层是整个神经网络的输入
1.2.卷积层。
卷积层中的每一个节点的输入只是上一层神经网络中的一小块,这个小块的大小有3 * 3或者5 * 5。卷积层试图将神经网络中的每一个小块进行更加深入的分析从而得到抽象程度更高的特征。一般来说,通过卷积层处理的节点矩阵会变得更深,节点矩阵的深度会增加。
1.3.池化层。
通过池化层,缩小模型大小,提高计算速度。池化层的输出通道数与输入的通道数相同,每个通道单独进行池化计算。池化层神经网络不会改变三维矩阵的深度,但是它可以缩小矩阵的大小。
池化操作有最大池化和平均池化两种操作。
最大池化:每个区域的最大值,作用就是保留提取到的特征的最大值,如果没有提取到特征,输出会比较小。
平均池化:每个区域的平均值。
1.4.全连接层。
在经过多轮卷积层和池化层处理之后,在卷积神经网络的最后一般会由1到2个全连接层来给出最后的分类结果。经过几轮的卷积层和池化层的处理之后,可以认为图像中的信息已被抽象成了信息含量更高的特征。我们可以将卷积层和池化层看成自动图像特征提取的过程。在特征提取完成之后,仍然需要使用全连接层来完成分类任务。
1.5.Softmax层。
Softmax层主要用于分类问题。经过Softmax层,可以得到当前样例中属于不同种类的概率分布情况。
1.6.BN层
BN层,归一化,对归一化的数据进行分布重构;加快收敛速度,泛化能力强
1.7.激活层
激活函数是非线性函数,避免输出是输入的线性组合,增强网络的逼近能力。
2 搭建网络
2.1 导入import
2.2 train,test:
告知要喂入网络的训练集和测试集是什么,指定训练集的输入特征x_train和训练集的标签y_train,还可以指定测试集的输入特征x_test和测试集的标签y_test
2.3 model=tf.keras.models.Sequential:
在Sequential()中搭建网络结构,逐层描述网络,相当于走一遍前向传播
model = tf.keras.models.Sequential([网络结构])
model = tf.keras.models.Sequential([ Conv2D(filters=6,kernel_size=(5,5),padding='same'), # 卷积层 BatchNormalization(), # BN层 Activation('relu'), # 激活层 MaxPool2D(pool_size=(2,2),strides=2,padding='same'), Dropout(0.2), #dropout层 ])
2.4 model.compile:
在compile()中配置训练方法,告知训练时选择哪种优化器、损失函数、评测指标
model.compile(optimizer=优化器,loss=损失函数,metrics=["准确率"])
model.compile(optimizer='adam', loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), metrics = ['sparse_categorical_accuracy'])
1.optimizer 优化器可选项
'sgd' or tf.keras.optimizers.SGD(lr=学习率,momentum=动量参数) 'adagrad' or tf.keras.optimizers.Adagrad(lr=学习率) 'adadelta' or tf.keras.optimizers.Adadelta(lr=学习率) 'adam' or tf.keras.optimizers.Adam(lr=学习率,beta_1=O.9,beta_2=0.999)
2.loss可选
'mse' or tf.keras.losses.MeanSquaredError() #均方差 'sparse_categorical_crossentropy' or tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)#交叉熵损失函数
3.Metrics可选 不太懂????
'accuracy':y_和y都是数值,如y_=[1] y=[1] 'categorical_accuracy':对多分类问题,计算在所有预测值上的平均正确率 'sparse_categorical_accuracy':y_是数值,y是独热码(概率分布),如y_=[1] y=[0.256,0.695,0.048]
2.5 model.fit:
在fit()中执行训练过程,告知训练集和测试集的输入特征和标签,告知每个batch是多少,告知要迭代多少次训练集。
model.fit(训练集的输入特征,训练集的标签,batch_size= ,epoch= ,validation_data=(测试集的输入特征,测试集的标签),validation_split=从训练集划分多少比例给测试集,validation_freq=多少次epoch测试一次)
history = model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1, callbacks=[cp_callback])
2.6 model.summary:
用summary()打印出网络的结构和参数统计
model.summary()
2.7 tf.keras.callbacks.ModelCheckpoint:
可以使用训练好的模型而无需从头开始重新训练,或在您打断的地方开始训练,以防止训练过程没有保存。 tf.keras.callbacks.ModelCheckpoint 允许在训练的过程中和结束时回调保存的模型。在每个epoch后保存模型到filepath。
keras.callbacks.ModelCheckpoint(filepath, monitor='val_loss', verbose=0, save_best_only=False, save_weights_only=False, mode='auto', period=1)
1 参数
-
filepath: 保存模型的路径。
-
monitor: 被监测的数据。val_acc或val_loss。
loss:训练集损失值
acc:训练集准确率
val_loss:测试集损失值
val_acc:测试集准确率
-
verbose: 详细信息模式,0 或者1。0为不打印输出信息,1为打印。
-
save_best_only: 如果save_best_only=True,将只保存在验证集上性能最好的模型mode: {auto, min, max} 的其中之一。 如果save_best_only=True,那么是否覆盖保存文件的决定就取决于被监测数据的最大或者最小值。 对于val_acc,模式就会是max;而对于val_loss,模式就需要是min。在auto模式中,方式会自动从被监测的数据的名字中判断出来。
-
save_weights_only: 如果 True,那么只有模型的权重会被保存 (model.save_weights(filepath)), 否则的话,整个模型会被保存 (model.save(filepath))。
-