Keras 的频道优先?
Posted
技术标签:
【中文标题】Keras 的频道优先?【英文标题】:Channels first with Keras? 【发布时间】:2021-07-22 20:24:59 【问题描述】:我正在尝试将我的 keras 模型与 keras-to-caffe 转换脚本一起使用;每当我尝试运行脚本时,它都会加载我的模型,然后给我一个错误,上面写着“仅支持通道优先”。我正在用形状 (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】:每个卷积层都接受参数data_format='channels_first'
。
您还可以找到您的keras.json
文件(在<yourUserFolder>/.keras
中)并将其设置为默认配置。
编辑:@Gal 的评论是一个非常有趣的观点。如果您打算使用多台计算机,最好在代码中设置配置:keras.backend.set_image_data_format('channels_first')
【讨论】:
更改 keras.json 中的配置可能会导致在另一台机器上使用代码时出现问题。我认为使用以下会更好: keras.backend.set_image_data_format('channels_first')以上是关于Keras 的频道优先?的主要内容,如果未能解决你的问题,请参考以下文章