Layer|卷积神经网络-深度学习( 二 )


填充在输入卷积的外部添加额外的0 , 以便卷积最终具有与输入相同数量的输出 。 如果我们不使用填充 , 则在每个卷积层之后 , 边界处的信息将丢失 , 这将减小卷积的大小以及性能 。
类型:有效填充 , 相同填充 。
在有效填充中 , 与输入相比 , 该特征的维度降低 , 而在相同填充中 , 维度增加或保持相同 。
Layer|卷积神经网络-深度学习文章插图
零填充
展平(Flattening ):
在应用了所有上述层后 , 我们得到矩阵形式的最终输出 , 但神经网络需要向量形式(1D)的输入数据 , 因此我们需要将我们的池化的特征映射展平成如下图所示的列 。
Layer|卷积神经网络-深度学习文章插图
完全连接层(Fully connected Layer)(FC):
在这里 , 我们将展平数据提供给FC的输入层(例如 x1 , x2 ...) 。 我们在中间层应用ReLU等激活函数 。
这里基本的神经网络工作发生像反向传播 , 优化 。
Layer|卷积神经网络-深度学习文章插图
激活函数:
在中间层中 , 优选ReLu , 而对于输出层 , 则使用Softmax或sigmoid 。
以下是部分代码展示:
Importing the Libraries and Packagesfrom keras.models import Sequentialfrom keras.layers import Convolution2Dfrom keras.layers import MaxPooling2Dfrom keras.layers import Flattenfrom keras.layers import Dense
Layer|卷积神经网络-深度学习文章插图
创建神经网络的第一步是使用keras中的顺序类初始化网络 。
Initialising the CNNmodel = Sequential()Convolutional Layermodel.add(Convolution2D(filters = 32, kernel_size = (3, 3),input_shape = (64, 64, 3),activation = ‘relu’))
Layer|卷积神经网络-深度学习文章插图
池化层
model.add(MaxPooling2D(pool_size = (2, 2)))
Layer|卷积神经网络-深度学习文章插图
pool_size:池化窗口的形状 。
展平层
model.add(Flatten())完全连接的层
Adding the Hidden layermodel.add(Dense(units = 128, activation = ‘relu’))Adding the Output Layermodel.add(Dense(units = 1, activation = ‘sigmoid’))
Layer|卷积神经网络-深度学习文章插图
编译CNN
model.compile(optimiser = ‘adam’,loss = ‘binary_crossentropy’,metrics = [‘accuracy’])
Layer|卷积神经网络-深度学习文章插图
重要提示:
如果训练的数据非常少 , 那么我们可以通过应用缩放 , 翻转原始图像和创建新图像等操作从现有数据创建新数据 。
Generating Image Datafrom keras.preprocessing.image import ImageDataGeneratortrain_datagen = ImageDataGenerator(rescale = 1./255,shear_range = 0.1,zoom_range = 0.2,horizontal_flip = True)test_datagen = ImageDataGenerator(rescale = 1./255)
Layer|卷积神经网络-深度学习文章插图