提高 ValueError( "Shapes %s and %s are incompatible" % (self, other)) ValueError: 形状(无,15)和(无,14)不兼容



我从事语音情感识别项目。一周前它工作了,我升级了anaconda,但我以前运行的代码不再工作了。我找不到问题它给出了标题中的错误。我的代码是:

# New model
model = Sequential()
model.add(Conv1D(256, 8, padding='same',input_shape=(X_train.shape[1],1)))  # X_train.shape[1] = No. of Columns
model.add(Activation('relu'))
model.add(Conv1D(256, 8, padding='same'))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.25))
model.add(MaxPooling1D(pool_size=(8)))
model.add(Conv1D(128, 8, padding='same'))
model.add(Activation('relu'))
model.add(Conv1D(128, 8, padding='same'))
model.add(Activation('relu'))
model.add(Conv1D(128, 8, padding='same'))
model.add(Activation('relu'))
model.add(Conv1D(128, 8, padding='same'))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.25))
model.add(MaxPooling1D(pool_size=(8)))
model.add(Conv1D(64, 8, padding='same'))
model.add(Activation('relu'))
model.add(Conv1D(64, 8, padding='same'))
model.add(Activation('relu'))
model.add(Flatten())
model.add(Dense(14)) # Target class number
model.add(Activation('softmax'))
# opt = keras.optimizers.SGD(lr=0.0001, momentum=0.0, decay=0.0, nesterov=False)
# opt = keras.optimizers.Adam(lr=0.0001)
opt = tf.keras.optimizers.RMSprop(lr=0.00001, decay=1e-6)
model.summary()
# %%
model.compile(loss='categorical_crossentropy', optimizer=opt,metrics=['accuracy'])
model_history=model.fit(X_train, y_train, batch_size=16, epochs=100, validation_data=(X_test, y_test))

我得到这个错误

ValueError: in user code:
C:Usersoguz_anaconda3libsite-packagestensorflowpythonkerasenginetraining.py:806 train_function  *
return step_function(self, iterator)
C:Usersoguz_anaconda3libsite-packagestensorflowpythonkerasenginetraining.py:796 step_function  **
outputs = model.distribute_strategy.run(run_step, args=(data,))
C:Usersoguz_anaconda3libsite-packagestensorflowpythondistributedistribute_lib.py:1211 run
return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
C:Usersoguz_anaconda3libsite-packagestensorflowpythondistributedistribute_lib.py:2585 call_for_each_replica
return self._call_for_each_replica(fn, args, kwargs)
C:Usersoguz_anaconda3libsite-packagestensorflowpythondistributedistribute_lib.py:2945 _call_for_each_replica
return fn(*args, **kwargs)
C:Usersoguz_anaconda3libsite-packagestensorflowpythonkerasenginetraining.py:789 run_step  **
outputs = model.train_step(data)
C:Usersoguz_anaconda3libsite-packagestensorflowpythonkerasenginetraining.py:748 train_step
loss = self.compiled_loss(
C:Usersoguz_anaconda3libsite-packagestensorflowpythonkerasenginecompile_utils.py:204 __call__
loss_value = loss_obj(y_t, y_p, sample_weight=sw)
C:Usersoguz_anaconda3libsite-packagestensorflowpythonkeraslosses.py:149 __call__
losses = ag_call(y_true, y_pred)
C:Usersoguz_anaconda3libsite-packagestensorflowpythonkeraslosses.py:253 call  **
return ag_fn(y_true, y_pred, **self._fn_kwargs)
C:Usersoguz_anaconda3libsite-packagestensorflowpythonutildispatch.py:201 wrapper
return target(*args, **kwargs)
C:Usersoguz_anaconda3libsite-packagestensorflowpythonkeraslosses.py:1535 categorical_crossentropy
return K.categorical_crossentropy(y_true, y_pred, from_logits=from_logits)
C:Usersoguz_anaconda3libsite-packagestensorflowpythonutildispatch.py:201 wrapper
return target(*args, **kwargs)
C:Usersoguz_anaconda3libsite-packagestensorflowpythonkerasbackend.py:4687 categorical_crossentropy
target.shape.assert_is_compatible_with(output.shape)
C:Usersoguz_anaconda3libsite-packagestensorflowpythonframeworktensor_shape.py:1134 assert_is_compatible_with
raise ValueError("Shapes %s and %s are incompatible" % (self, other))
ValueError: Shapes (None, 15) and (None, 14) are incompatible

我的值错误代码是

def print_confusion_matrix(confusion_matrix, class_names, figsize = (10,7), fontsize=15):

df_cm = pd.DataFrame(
confusion_matrix, index=class_names, columns=class_names, 
)
fig = plt.figure(figsize=figsize)
try:
heatmap = sns.heatmap(df_cm, annot=True, fmt="d")
except ValueError:
raise ValueError("Confusion matrix values must be integers.")

heatmap.yaxis.set_ticklabels(heatmap.yaxis.get_ticklabels(), rotation=0, ha='right', fontsize=fontsize)
heatmap.xaxis.set_ticklabels(heatmap.xaxis.get_ticklabels(), rotation=45, ha='right', fontsize=fontsize)
plt.ylabel('Doğru')
plt.xlabel('Tahmin Edilen')
# Gender recode function
def gender(row):
if row == 'kadin_igrenme' or 'kadin_korku' or 'kadin_mutlu' or 'kadin_uzgun' or 'kadin_saskin' or 'kadin_sakin':
return 'kadin'
elif row == 'erkek_kizgin' or 'erkek_korku' or 'erkek_mutlu' or 'erkek_uzgun' or 'erkek_saskin' or 'erkek_sakin' or 'erkek_igrenme':
return 'erkek'

有人能帮我吗编辑我添加了x列y列形状

print(X_train.shape)
print(y_train.shape)
print(y_test.shape)
print(X_test.shape)
print(lb.classes_)
#print(y_train[0:10])
#print(y_test[0:10])

(90312161((9031,15((3011,15((30112161([1] :https://i.stack.imgur.com/LKZDB.png

问题在于网络输出形状。由于标签具有形状

(b, 15) where b = 9031 for train and 3011 for test

网络中的最后一个密集层也应该有15个神经元。将最终层更新为

model.add(Dense(15)

它应该可以正常工作。