一、理论
卷积神经网络结构:(卷积层+(可选)池化层)*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,保证输入句子长度和卷积后输出的句子长度一致。
tensorflow fit()方法:参考
https://blog.csdn.net/crazyman2010/article/details/103705318