Skip to main content
 首页 » 编程设计

python之Tensorflow,预期 conv2d_input 有 4 个维度

2024年11月24日36kevingrace

我正在使用 tf.keras 并且出现以下错误:

ValueError: Error when checking input: expected conv2d_input to have 4 dimensions, but got array with shape (24946, 50, 50)

有人可以帮我吗?

代码(Image_Size 是:50x50)

import tensorflow as tf 
import numpy as np 
import pickle 
from tensorflow.keras.models import Sequential 
from tensorflow.keras.layers import Dense, Dropout, Activation, Flatten, Conv2D, MaxPooling2D 
 
 
pickle_ind = open("x.pickle", "rb") 
x = pickle.load(pickle_ind) 
x = np.array(x, dtype=float) 
# x = x/255.0 
 
pickle_ind = open("y.pickle", "rb") 
y = pickle.load(pickle_ind) 
 
n_batch = len(x) 
 
model = Sequential() 
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(50, 50, 1))) 
model.add(MaxPooling2D((2, 2))) 
model.add(Conv2D(64, (3, 3), activation='relu')) 
model.add(MaxPooling2D((2, 2))) 
model.add(Conv2D(64, (3, 3), activation='relu')) 
 
model.summary() 
 
model.compile(optimizer='adam', 
              loss='binary_crossentropy', 
              metrics=['accuracy']) 
 
model.fit(x, y, epochs=20, batch_size=n_batch) 

请您参考如下方法:

添加 channel 维度:

x = np.expand_dims(x, -1) 

您还需要添加输出密集层:

model = Sequential() 
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(50, 50, 1))) 
model.add(MaxPooling2D((2, 2))) 
model.add(Conv2D(64, (3, 3), activation='relu')) 
model.add(MaxPooling2D((2, 2))) 
model.add(Conv2D(64, (3, 3), activation='relu')) 
model.add(Flatten()) 
model.add(Dense(2, activation='softmax')) 
model.compile(optimizer='adam', 
              loss='sparse_softmax_crossentropy', 
              metrics=['accuracy'])