卷积层输出深度理解困惑及TensorFlow相关技术问题咨询
卷积层输出深度与TensorFlow模型输出形状疑问解答
一、多通道输入的卷积融合原理
拿你提到的6x6x3输入、2个3x3 filter的例子来说:每个filter实际是3x3x3的结构——完全对应输入的3个颜色通道。卷积计算时,这个filter会分别在输入的红、绿、蓝三个通道上做3x3的卷积运算,然后把三个通道得到的结果逐像素相加,再加上该filter自带的偏置值,就得到输出特征图里的一个4x4通道。用2个这样独立的filter,就会生成2个独立的4x4通道,最终输出就是4x4x2的张量。
二、TensorFlow模型summary中None的含义
模型summary里输出形状的第一个维度None,代表批量大小(batch size)。因为定义模型时,我们只指定了单张输入图片的形状(128,128,3),没有固定一次喂给模型的图片数量(也就是批量大小)。训练时你可以用32、64这类批量值,预测时可能只用1张图片,模型都能适配处理,所以用None来表示这个可灵活调整的维度。
相关代码
model = Sequential() model.add(Conv2D(32, kernel_size=5,strides=1, activation=None, input_shape=(128,128,3))) model.add(BatchNormalization()) model.add(Activation('relu')) model.add(MaxPool2D(2,2)) model.add(Dropout(0.2)) model.add(Flatten()) model.add(Dense(64,activation='relu')) model.add(Dropout(0.5)) model.add(Dense(units=1)) model.add(Activation('sigmoid')) for layer in model.layers: # check for convolutional layer if 'conv' not in layer.name: continue # get filter weights filters, biases = layer.get_weights() print(layer.name, filters.shape)
模型summary输出
conv2d_45 (Conv2D) (None, 124, 124, 32) 2432 batch_normalization_38 (BatchNormalization) (None, 124, 124, 32) 128 activation_36 (Activation) (None, 124, 124, 32) 0 max_pooling2d_17 (MaxPooling2D) (None, 62, 62, 32) 0 dropout_26 (Dropout) (None, 62, 62, 32) 0 flatten_11 (Flatten) (None, 123008) 0 dense_23 (Dense) (None, 64) 7872576 dropout_27 (Dropout) (None, 64) 0 dense_24 (Dense) (None, 1) 65 activation_37 (Activation) (None, 1) 0
内容的提问来源于stack exchange,提问作者Zonglai Liang
相关产品推荐
相关产品推荐

