构建用于图像分类的Inception架构。Keras。ValueError

我正在尝试构建一个用于图像分类的GoogleNet Inception架构。我已经读取并保存了我的图像数据和标签,如下所示。

print(X_train.shape)(16016, 224, 224, 3)print(X_test.shape)(16016, 1, 163)print(y_train.shape)(14939, 224, 224, 3)print(y_test.shape)(14939, 1, 163)

使用这些数据,我正在尝试训练我的分类器。以下是我的代码。

IMG_SIZE = 224input_image = Input(shape = (IMG_SIZE,IMG_SIZE,3))tower_1 = Conv2D(64,(1,1),padding='same', activation='relu') (input_image)tower_1 = Conv2D(64,(3,3), padding='same',activation='relu') (tower_1)tower_2 = Conv2D(64,(1,1), padding='same',activation='relu')(input_image)tower_2 = Conv2D(64,(5,5), padding='same', activation='relu')(tower_2)tower_3 = MaxPooling2D((3,3),strides=(1,1),padding='same')(input_image)tower_3 = Conv2D(64,(1,1), padding='same',activation='relu')(tower_3)output = keras.layers.concatenate([tower_1,tower_2,tower_3],axis=3)output = Flatten()(output)out = Dense(163, activation='softmax')(output)model = Model(inputs = input_image, outputs = out)print(model.summary())epochs = 30lrate = 0.01decay = lrate/epochssgd = SGD(lr=lrate, momentum=0.9, decay=decay, nesterov= False)model.compile(loss='categorical_crossentropy',optimizer=sgd, metrics=['accuracy'])history = model.fit(X_train,y_train,validation_data=(X_test,y_test), epochs=epochs, batch_size=32)from keras.models import model_from_jsonmodel_json = model.to_json()with open("model.json", "w") as json_file:    json_file.write(model_json)model.save_weights(os.path.join(os.getcwd(),'model.h5'))scores = model.evaluate(X_test,y_test, verbose=0)print("Accuracy: %.2f%%" % (scores[1]*100))

但每次我运行程序时,都会得到一个我不理解的ValueError。我已经尝试过'y_test= y_test.reshape(14939,IMG_SIZE,IMG_SIZE,3)',但仍然得到相同的错误。

错误

Traceback (most recent call last):  File "c:/Users/zeele/OneDrive/Desktop/googleNet_Architecture.py", line 149, in <module>    history = model.fit(X_train,y_train,validation_data=(X_test,y_test), epochs=epochs, batch_size=32)  File "C:\Users\zeele\Miniconda3\lib\site-packages\keras\engine\training.py", line 1405, in fit    batch_size=batch_size)  File "C:\Users\zeele\Miniconda3\lib\site-packages\keras\engine\training.py", line 1299, in _standardize_user_data    exception_prefix='model target')  File "C:\Users\zeele\Miniconda3\lib\site-packages\keras\engine\training.py", line 121, in _standardize_input_data    str(array.shape))ValueError: Error when checking model target: expected dense_1 to have 2 dimensions, but got array with shape (14939, 224, 224, 3)

请帮助我解决这个问题。

谢谢你。


回答:

可以肯定的是,你的数据形状不正确/不一致;因为

print(X_train.shape)(16016, 224, 224, 3)

人们肯定会期望X_test.shape在性质上是相似的,唯一的区别在于样本数量,即类似于(NUM_TEST_SAMPLES, 224, 224, 3)的形式;但你报告的是:

print(X_test.shape)(16016, 1, 163)

这看起来更像是你的标签的预期形状(即y_train.shape)。

还请注意,训练集和测试集的数据和标签的长度必须相同,这在这里再次不是情况:对于训练集和测试集,你报告了16,016个数据样本和只有14,939个标签。

我的猜测是,你在使用scikit-learn的train_test_split将数据分割成训练集和测试集时很可能犯了一个(足够常见的)错误(参见文档):

# 错误的顺序:X_train, y_train, X_test, y_test = train_test_split(X, y, test_size=0.33, random_state=42)# 正确的顺序:X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注