如何为我的 cnn 模型提供正确的输入形状?

问题描述 投票:0回答:1

我正在创建一个视频分类模型,我提取了所有图像特征并用它构建了一个数据集。当我尝试适应我的代码时,它显示与我的数据集形状相关的错误。我尝试了不同的形状,但没有任何效果。有谁知道这个吗?

下面是我的 CNN 模型的代码。

model = Sequential()

#building a Cnn network
model.add(Conv2D(filters=12, kernel_size=(3,3), activation='relu', input_shape=(18,40,1)))
model.add(MaxPooling2D((2,2)))

# completing our model with a simple dense layer
model.add(Dense(24, activation='relu'))
model.add(Dense(2, activation='softmax'))

下面是我的 X 和 y 形状。

X - (18,40)
y - (18,)

我尝试拟合我的模型,但它显示以下错误。

ValueError: in user code:

File "/opt/conda/lib/python3.10/site-packages/keras/engine/training.py", line 1284, in train_function  *
    return step_function(self, iterator)
File "/opt/conda/lib/python3.10/site-packages/keras/engine/training.py", line 1268, in step_function  **
    outputs = model.distribute_strategy.run(run_step, args=(data,))
File "/opt/conda/lib/python3.10/site-packages/keras/engine/training.py", line 1249, in run_step  **
    outputs = model.train_step(data)
File "/opt/conda/lib/python3.10/site-packages/keras/engine/training.py", line 1050, in train_step
    y_pred = self(x, training=True)
File "/opt/conda/lib/python3.10/site-packages/keras/utils/traceback_utils.py", line 70, in error_handler
    raise e.with_traceback(filtered_tb) from None
File "/opt/conda/lib/python3.10/site-packages/keras/engine/input_spec.py", line 298, in assert_input_compatibility
    raise ValueError(

ValueError: Input 0 of layer "sequential" is incompatible with the layer: expected shape=(None, 18, 40, 1), found shape=(None, 40)
python image-processing deep-learning conv-neural-network
1个回答
0
投票

最好先重塑,然后创建 CNN 模型。

import numpy as np
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
from keras.utils import to_categorical


X = np.random.rand(18, 40)  # Replace with your actual image data
y = np.random.randint(2, size=18)  # Replace with your actual labels
X = np.reshape(X, (18, 40, 1))
y = to_categorical(y, num_classes=2)

model = Sequential()
model.add(Conv2D(filters=12, kernel_size=(3, 3), activation='relu', input_shape=(18, 40, 1))
model.add(MaxPooling2D((2, 2)))
model.add(Flatten())
model.add(Dense(24, activation='relu'))
model.add(Dense(2, activation='softmax'))

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

model.fit(X, y, epochs=10, batch_size=1)  
© www.soinside.com 2019 - 2024. All rights reserved.