【发布时间】:2020-12-06 16:54:13
【问题描述】:
我是图像处理和使用 keras 和 tensorflow 进行多图像分类的新手。我正在使用的代码如下:
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
import pandas as pd
import numpy as np
数据集已经分为训练集和测试集。训练集和测试集是图像数组,标签取自 csv 文件。
X_train = np.load('X_train_images.npy')
X_test = np.load('X_test_images.npy')
Y_train = pd.read_csv('Y_train_Labels.csv',encoding='latin-1')
Y_test = pd.read_csv('Y_test_Labels.csv',encoding='latin-1')
Y_train = Y_train['label'].to_numpy()
Y_test = Y_test['label'].to_numpy()
print(X_train.shape)
print(X_test.shape)
print(Y_train.shape)
print(Y_test.shape)
所以数据集的形状是:
(4000, 4, 4, 512)
(1000, 4, 4, 512)
(4000,)
(1000,)
所以定义模型:
batch_size=32
epochs=10
model=tf.keras.Sequential()
model.add(tf.keras.layers.Conv2D(32,kernel_size=(3,3),activation='relu',input_shape=(4,4,512)))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2,2)))
#I'm adding two Dropout layers to prevent overfitting
model.add(tf.keras.layers.Dropout(0.25))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(1024,activation='relu'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(10,activation='softmax'))
编译模型然后训练它:
model.compile(loss='categorical_crossentropy',
optimizer=tf.keras.optimizers.Adam(lr=0.001,decay=1e-6), metrics=['accuracy'])
model.fit(X_train/255.0, tf.keras.utils.to_categorical(Y_train),
batch_size=batch_size, shuffle=False, epochs=epochs,
validation_data=(X_test/255.0, tf.keras.utils.to_categorical(Y_test))
)
最后是预测分数:
predictions=model.predict(x_test)
scores = model.evaluate(x_test / 255.0, tf.keras.utils.to_categorical(y_test)
)
在训练模型时,我在以下位置收到输入形状错误:
validation_data=(X_test/255.0, tf.keras.utils.to_categorical(Y_test))
错误是:
ValueError: Shapes (32, 9) and (32, 10) are incompatible
我不明白为什么我会收到这个错误,因为我知道这是因为类的形状?
谢谢
【问题讨论】:
-
看起来形状不匹配:您的图层签名
input_shape=(512,4,4),您正在尝试输入(batch, 4, 4, 512)
标签: python tensorflow machine-learning image-processing keras