Keras中的Channels first是什么意思?

5
我试图使用keras-to-caffe转换脚本来使用我的keras模型;每当我尝试运行脚本时,它会加载我的模型,然后给出一个错误,指出“仅支持channels-first”。我正在使用形状为(24,24,3)的图像来输入模型 - 但它需要(3,24,24)的形状。
每当我尝试在形状为(3,24,24)的图像上训练模型时,我会遇到这个错误(我相信它认为我正在提供一个带有24个通道的3x24图像);
ValueError: Negative dimension size caused by subtracting 3 from 1 for 'conv2d_2/convolution' (op: 'Conv2D') with input shapes: [?,1,22,32], [3,3,32,64].

如何为我的Keras模型提供通道优先的图像?

(如果有人需要,以下是模型代码:我只是在做一个简单的分类问题)

input_1 = Input(shape=input_shape) # input shape is 24,24,3 - needs to be 3,24,24


conv_1 = Conv2D(32, kernel_size=(3, 3),
             activation='relu',
             input_shape=input_shape)(input_1)

conv_2 = Conv2D(64, (3, 3), activation='relu')(conv_1)

pool_1 = MaxPooling2D(pool_size=(2, 2))(conv_2)

drop_1 = Dropout(0.25)(pool_1)

flatten_1 = Flatten()(drop_1)

dense_1 = Dense(128, activation='relu')(flatten_1)

drop_2 = Dropout(0.5)(dense_1)

dense_2 = Dense(128, activation='relu')(drop_2)

drop_3 = Dropout(0.5)(dense_2)

dense_3 = Dense(num_classes, activation='softmax')(drop_3)

model = Model(inputs=input_1, outputs=dense_3)

model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adadelta(),
              metrics=['accuracy'])

model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=epochs,
          validation_data=(x_test, y_test),
          verbose=1)
1个回答

14

每个卷积层都接受参数data_format='channels_first'

您还可以在<yourUserFolder>/.keras中找到您的keras.json文件,并将其设置为默认配置。

编辑:@Gal的评论提出了一个非常有趣的观点。如果您计划使用多台计算机,最好在代码中设置配置:keras.backend.set_image_data_format('channels_first')


7
在keras.json中更改配置可能会导致在另一台机器上使用代码时出现问题。我认为使用以下代码将更好:keras.backend.set_image_data_format('channels_first') - Gal Avineri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接