【问题标题】:Type error when trying to fit a VGG like model尝试拟合类似 VGG 的模型时出现类型错误
【发布时间】:2017-08-05 08:52:33
【问题描述】:

当我尝试拟合以下模型时:

model = Sequential([
    Lambda(vgg_preprocess, input_shape=(3,244,244)),
    Conv2D(64,3,3, activation='relu'),
    BatchNormalization(axis=1),
    Conv2D(64,3,3, activation='relu'),
    MaxPooling2D(),
    BatchNormalization(axis=1),
    Conv2D(128,3,3, activation='relu'),
    BatchNormalization(axis=1),
    Conv2D(128,3,3, activation='relu'),
    MaxPooling2D(),
    BatchNormalization(axis=1),
    Conv2D(256,3,3, activation='relu'),
    BatchNormalization(axis=1),
    Conv2D(256,3,3, activation='relu'),
    MaxPooling2D(),
    Flatten(),
    BatchNormalization(),
    Dense(1024, activation='relu'),
    BatchNormalization(),
    Dropout(0.5),
    Dense(1024, activation='relu'),
    BatchNormalization(),
    Dense(10, activation='softmax')
])
model.compile(Adam(), loss='categorical_crossentropy', metrics=['accuracy'])

我收到此错误:

TypeError: Cannot convert Type TensorType(float32, 4D) (of Variable AbstractConv2d_gradInputs{convdim=2, border_mode='valid', subsample=(1, 1), filter_flip=True, imshp=(None, 256, 56, 56), kshp=(256, 256, 3, 3), filter_dilation=(1, 1)}.0) into Type TensorType(float64, 4D). You can try to manually convert AbstractConv2d_gradInputs{convdim=2, border_mode='valid', subsample=(1, 1), filter_flip=True, imshp=(None, 256, 56, 56), kshp=(256, 256, 3, 3), filter_dilation=(1, 1)}.0 into a TensorType(float64, 4D).

这就是我做拟合的方式:

 model.fit_generator(train_batches, train_batches.n, nb_epoch=1, validation_data=test_batches, nb_val_samples=test_batches.n)

这里是vgg_preprocess函数:

vgg_mean = np.array([123.68, 116.779, 103.939]).reshape((3,1,1))

def vgg_preprocess(x):
    x = x - vgg_mean  #Subtract the mean of each channel
    return x[:, ::-1] #Inverse the channel order to suit that of VGG RGB->BGR

这是什么意思,如何解决?

【问题讨论】:

  • vgg_preprocess 长什么样子?
  • @MarcinMożejko 它标准化输入并重新排序颜色通道。我将其添加到问题中
  • 你能打印出vgg_mean.dtype吗?
  • 试试vgg_mean = np.array(vgg_mean, dtype='float32')
  • 10 分钟后,好吗?

标签: keras theano conv-neural-network


【解决方案1】:

问题在于 vgg_mean.dtype = 'float64,而大多数 DL 包中的标准浮点决策是 float32

设置:

vgg_mean = np.array(vgg_mean, dtype='float32')

应该可以解决您的问题。

【讨论】:

    猜你喜欢
    • 2022-07-12
    • 2022-07-21
    • 1970-01-01
    • 2020-09-12
    • 2022-07-24
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    相关资源
    最近更新 更多