ValueError:发现样本数量不一致的输入变量:[4, 304]
Posted
技术标签:
【中文标题】ValueError:发现样本数量不一致的输入变量:[4, 304]【英文标题】:ValueError: Found input variables with inconsistent numbers of samples: [4, 304] 【发布时间】:2022-01-11 13:11:47 【问题描述】:我试图从我制作的模型中制作一个混淆矩阵,在制作模型之前一切似乎都很好,直到我遇到一个错误提示
ValueError:发现输入变量的数量不一致 样本:[4, 304]
这是我使用的代码
# Convert List to numpy array, for Keras use
Train_label = np.eye(n_labels)[label] # One-hot encoding by np array function
Train_data = np.array(data)
print("Dataset shape is",Train_data.shape, "(size, timestep, column, row, channel)")
print("Label shape is",Train_label.shape,"(size, label onehot vector)")
# shuffling dataset for input fit function
# if don`t, can`t train model entirely
x = np.arange(Train_label.shape[0])
np.random.shuffle(x)
# same order shuffle is needed
Train_label = Train_label[x]
Train_data = Train_data[x]
train_size = 0.9
X_train=Train_data[:int(Totalnb * 0.9),:]
Y_train=Train_label[:int(Totalnb * 0.9)]
X_test=Train_data[int(Totalnb * 0.1):,:]
Y_test=Train_label[int(Totalnb * 0.1):]
# 2. Buliding a Model
# declare input layer for CNN+LSTM architecture
video = Input(shape=(timesteps,img_col,img_row,img_channel))
STEPS_PER_EPOCH = 120
#AlexNet Layer
model = tf.keras.models.Sequential([
# 1st conv
tf.keras.layers.Conv2D(96, (11,11),strides=(4,4), activation='relu', input_shape=(img_col, img_row, img_channel)),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.MaxPooling2D(2, strides=(2,2)),
# 2nd conv
tf.keras.layers.Conv2D(256, (5,5),strides=(1,1), activation='relu',padding="same"),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.MaxPooling2D(2, strides=(2,2)),
# 3rd conv
tf.keras.layers.Conv2D(384, (3,3),strides=(1,1), activation='relu',padding="same"),
tf.keras.layers.BatchNormalization(),
# 4th conv
tf.keras.layers.Conv2D(384, (3,3),strides=(1,1), activation='relu',padding="same"),
tf.keras.layers.BatchNormalization(),
# 5th Conv
tf.keras.layers.Conv2D(256, (3, 3), strides=(1, 1), activation='relu',padding="same"),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.MaxPooling2D(2, strides=(2,2)),
])
model.trainable = True
# FC Dense Layer
x = model.output
x = Flatten()(x)
cnn_out = Dense(128)(x)
# Construct CNN model
Lstm_inp = Model(model.input, cnn_out)
# Distribute CNN output by timesteps
encoded_frames = TimeDistributed(Lstm_inp)(video)
# Contruct LSTM model
encoded_sequence = LSTM(256)(encoded_frames)
hidden_Drop = Dropout(0.2)(encoded_sequence)
hidden_layer = Dense(128)(hidden_Drop)
outputs = Dense(n_labels, activation="softmax")(hidden_layer)
# Contruct CNN+LSTM model
model = Model([video], outputs)
# 3. Setting up the Model Learning Process
# Model Compile
opt = SGD(lr=0.01)
model.compile(loss = "categorical_crossentropy", optimizer = opt, metrics=['accuracy'])
model.summary()
# 4. Training the Model
hist = model.fit(X_train, Y_train, batch_size=batch_size, validation_split=validation_ratio, shuffle=True, epochs=num_epochs)
Y_pred2 = model.predict(X_test)
y_pred= np.argmax(Y_pred2, axis=1) # prediksi
y_test=np.argmax(Y_test, axis=0)
from sklearn.metrics import confusion_matrix
confusion_matrix(y_test, y_pred)
import seaborn as sns
import matplotlib.pyplot as plt
f, ax = plt.subplots(figsize=(8,5))
sns.heatmap(confusion_matrix(y_test, y_pred), annot=True, fmt=".0f", ax=ax)
plt.xlabel("Y_head")
plt.ylabel("Y_true")
plt.show()
from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred))
一切似乎都很好,但是当我尝试在confusion_matrix(y_test, y_pred)
行中创建混淆矩阵时出现错误
我还是不知道可能是什么问题
希望有人能帮我解决这个问题
非常感谢你们
【问题讨论】:
您能发布整个错误堆栈吗?看起来有点奇怪的一件可能的事情是,在计算y_pred
和 y_test
的 argmax 时,您采用了不同的轴。但这可能没问题,具体取决于您的数据布局。
嗨蒂娜,我刚刚编辑了我遇到的错误问题,如果它取决于我的数据布局,这里是我的驱动器到我的数据集的链接,drive.google.com/drive/folders/…
但是如果它取决于我的数据布局,那么我制作模型时不应该出错吗?因为当我尝试编译和拟合我的模型时一切都很好
【参考方案1】:
张贴我的 cmets 作为完整性的答案:
可能看起来有点奇怪的是,在计算 y_pred
和 y_test
的 argmax 时,您采用了不同的轴。但这可能没问题,具体取决于您的数据布局。
y_test
和 y_pred
似乎长度不同。你能检查Y_pred2
和Y_test
的形状,看看你计算argmax的轴是否正确。
【讨论】:
以上是关于ValueError:发现样本数量不一致的输入变量:[4, 304]的主要内容,如果未能解决你的问题,请参考以下文章
ValueError:发现样本数量不一致的输入变量:[100, 300]
混淆矩阵 - ValueError:发现样本数量不一致的输入变量
ValueError:发现样本数量不一致的输入变量:[2750, 1095]
ValueError:发现样本数量不一致的输入变量:[29675、9574、29675]