【问题标题】:Numpy array not being accepted by keras modelkeras模型不接受numpy数组
【发布时间】:2020-01-10 10:16:28
【问题描述】:
print(x_train.shape)
model.fit(x_train, y_train, epochs=15, batch_size=10)

给出一个输出

(1020, 224, 224, 3, 5)
Error when checking target:expected conv3d_11 to have 5 dimensions, but got array with shape (1020, 1)

一个样本输入是一个包含 5 个图像的 numpy 数组。 我应该如何更改/预处理我的输入以使其正常工作?

编辑:

我的 Keras 模型现在是单个 3d Conv 网络。

input_shape = (224, 224, 3, 5)
model = Sequential([
Conv3D(64, (3, 3, 1), input_shape=input_shape, padding='same', activation='relu', data_format='channels_last')
])

仍然遇到同样的错误。 另外,尺寸说明: 1020:没有。样品, 224x224x3:单个图像尺寸, 5:样本中的图像数量,

【问题讨论】:

  • 似乎conv3d_11 不是您的第一层。也许张量形状在前向传播过程中发生了变化。也许您可以向我们展示您的整个 Keras 模型
  • x_train 是什么数据?我猜您正在尝试使用图像数据进行训练,那么每个维度应该是什么意思? 224, 224 是宽度和高度,有 3 个通道。 5和1020是什么意思?我建议将您的数据重塑为 (5, 1020, 224, 224, 3)
  • 向我们展示模型 ..从 model = Sequential() .. 或类似的东西开始
  • 用所有询问的信息更新了问题
  • 快速问题:您是在读取图像还是只是将字符串(可能是图像名称)传递给第一层?

标签: python tensorflow keras neural-network conv-neural-network


【解决方案1】:

请参考下面的示例代码来实现Conv3D

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten
from tensorflow.keras.layers import Conv3D, MaxPooling3D, BatchNormalization
import numpy as np

input_shape=(224, 224, 3, 5)   

model = Sequential()
#C1
model.add(Conv3D(16, (3, 3, 1), strides=(1, 2, 2), padding='same',activation='relu',data_format= "channels_first", input_shape=input_shape))
model.add(MaxPooling3D(pool_size=(1, 2, 2),data_format= "channels_first", padding='same'))
model.add(BatchNormalization())
#C2
model.add(Conv3D(32, (3, 3, 1), strides=(1, 1, 1), padding='same',data_format= "channels_first",  activation='relu'))
model.add(MaxPooling3D(pool_size=(1, 2, 2),data_format= "channels_first", padding='same'))
model.add(BatchNormalization())
#C3
model.add(Conv3D(64, (3, 3, 1), strides=(1, 1, 1), padding='same',data_format= "channels_first",  activation='relu'))
model.add(MaxPooling3D(pool_size=(1, 2, 2), data_format= "channels_first", padding='same'))
model.add(BatchNormalization())

model.add(Flatten())
model.add(Dropout(0.5))
model.add(Dense(256, activation='sigmoid'))
model.add(Dropout(0.5))
model.add(Dense(2, activation='softmax'))

opt_adam = tf.keras.optimizers.Adam(lr=0.00001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)
model.compile(loss='categorical_crossentropy', optimizer=opt_adam, metrics=['accuracy'])

print(model.summary())

输出:

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv3d (Conv3D)              (None, 16, 224, 2, 3)     32272     
_________________________________________________________________
max_pooling3d (MaxPooling3D) (None, 16, 224, 1, 2)     0         
_________________________________________________________________
batch_normalization (BatchNo (None, 16, 224, 1, 2)     8         
_________________________________________________________________
conv3d_1 (Conv3D)            (None, 32, 224, 1, 2)     4640      
_________________________________________________________________
max_pooling3d_1 (MaxPooling3 (None, 32, 224, 1, 1)     0         
_________________________________________________________________
batch_normalization_1 (Batch (None, 32, 224, 1, 1)     4         
_________________________________________________________________
conv3d_2 (Conv3D)            (None, 64, 224, 1, 1)     18496     
_________________________________________________________________
max_pooling3d_2 (MaxPooling3 (None, 64, 224, 1, 1)     0         
_________________________________________________________________
batch_normalization_2 (Batch (None, 64, 224, 1, 1)     4         
_________________________________________________________________
flatten (Flatten)            (None, 14336)             0         
_________________________________________________________________
dropout (Dropout)            (None, 14336)             0         
_________________________________________________________________
dense (Dense)                (None, 256)               3670272   
_________________________________________________________________
dropout_1 (Dropout)          (None, 256)               0         
_________________________________________________________________
dense_1 (Dense)              (None, 2)                 514       
=================================================================
Total params: 3,726,210
Trainable params: 3,726,202
Non-trainable params: 8

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 2017-10-18
    • 2021-09-01
    • 1970-01-01
    • 2020-05-10
    相关资源
    最近更新 更多