卷积神经网络(CNN)理论与实现

一、理论

卷积神经网络结构:(卷积层+(可选)池化层)*N+全连接层*M(M>=0),卷积层的输入输出是矩阵,全连接层输入输出是向量,在卷积层的最后一层做一个展平。

主要用于分类任务

全卷积神经网络:(卷积层+(可选)池化层)*N+反卷积层*K,可以做物体分割类任务

卷积操作

解决参数过多导致的计算资源不足,容易过拟合的问题。解决方法:局部连接(基于图像的区域性)、参数共享(基于图像特征与位置无关)

卷积核是反向传播计算出的参数,卷积:卷积核与输入做点积乘法。步长:卷积核每次在输入上滑动的距离。padding:使输出size不变。

池化操作

类似卷积,计算方式不同,最大值池化:池化核滑动覆盖区域的最大值作为结果输出。

特点:常使用不重叠(kernal-size=步长)、不补零的操作。参数即为步长和池化核大小。用于减少图像尺寸,从而减少计算量。一定程度平移鲁棒。损失了空间精度。

二、实现

embedding_dim = 16
batch_size = 128
cnn_model = keras.models.Sequential([
    keras.layers.Embedding(vocab_size, 
                               embedding_dim,
                input_length=max_length),
    keras.layers.Conv1D(filters=256,kernel_size=2,kernel_initializer='he_normal',
              strides=1,padding='SAME',activation='relu'),
    keras.layers.GlobalMaxPooling1D(),
    keras.layers.Dropout(rate=0.5),
    keras.layers.Dense(12, activation='sigmoid')
])
cnn_model.summary()
cnn_model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

Conv1D

在文本中,卷积的某一维大小往往为embedding长度,即在宽度上不需要窗口移动,宽度就是整个窗口,所以conv1d默认卷积的宽度就为embedding维度,长度通过kernel_size来指定的,此处为2,即卷积核的大小为2*embedding_size。strides为步长,此处为1,即卷积核每隔一个单词移动一次。filters是卷积核的个数,即输出的维度。padding有valid和same两种选择,valid在长度方向(宽度方向不padding)不进行padding,而same则在长度方向进行padding,保证输入句子长度和卷积后输出的句子长度一致。

https://blog.csdn.net/bobobe/article/details/87923618

tensorflow fit()方法:参考

https://blog.csdn.net/crazyman2010/article/details/103705318

TextCNN

https://blog.csdn.net/u014732537/article/details/79573174

Leave a Reply