这不是我的问题,有人问过我这个问题,我已经解决了。还发现很多新手都遇到过这个问题或类似的问题。我的朋友正在使用
这不是我的问题,有人问过我这个问题,我已经解决了。还发现很多新手都遇到过这个问题或类似的问题。我的朋友正在 使用 卷积神经网络 情绪检测模型 。在定义模型时,她犯了一个非常小的错误,导致了这个错误。所以我把这个分享给大家,希望大家会觉得它有用。
我正在定义模型。这是代码
def model_fer(inputs):
conv_1= convolution(inputs,32,(3,3))
conv_2= convolution(conv_1,64,(5,5))
conv_3= convolution(conv_2,128,(3,3))
flatten = Flatten()(conv_3)
dense_1 = dense_f(flatten,256)
output = Dense(7, activation = 'softmax')(dense_1)
model = Model(inputs = [inputs], outputs = [output])
model.compile(loss= ['categorical_crossentrophy'], optimizer = 'adam', metrics= ['accuracy'])
return model
但是当我尝试将模型拟合到训练数据上时,它显示了一个 ValueError 错误
无法识别损失标识符Categorical_crossentropy。
有时它还说:
损失函数:\'categorical_crossentrophy\'。请确保您使用的是“keras.utils.custom_object_scope”,并且该对象包含在范围内。
完整错误:
ValueError Traceback (most recent call last)
Cell In[11], line 1
----> 1 history = model.fit(
2 x = train_generator,
3 steps_per_epoch=steps_per_epoch,
4 epochs=5,
5 validation_data=validation_generator,
6 validation_steps=validation_steps//2,
7 callbacks=callbacks
8 )
File c:\Users\mebub_9a7jdi8\Desktop\Emotion_Detection_Model\.env\Lib\site-packages\keras\src\utils\traceback_utils.py:122, in filter_traceback.<locals>.error_handler(*args, **kwargs)
119 filtered_tb = _process_traceback_frames(e.__traceback__)
120 # To get the full stack trace, call:
121 # `keras.config.disable_traceback_filtering()`
--> 122 raise e.with_traceback(filtered_tb) from None
123 finally:
124 del filtered_tb
File c:\Users\mebub_9a7jdi8\Desktop\Emotion_Detection_Model\.env\Lib\site-packages\keras\src\losses\__init__.py:201, in get(identifier)
199 return obj
200 else:
--> 201 raise ValueError(f"Could not interpret loss identifier: {identifier}")
ValueError: Could not interpret loss identifier: categorical_crossentrophy
问题出在 categorical_crossentropy ,它应该是 categorical_crossentropy 。错误是由于一个小的拼写错误而发生的。
修正后的代码:
def model_fer(inputs):
conv_1 = convolution(inputs, 32, (3, 3))
conv_2 = convolution(conv_1, 64, (5, 5))
conv_3 = convolution(conv_2, 128, (3, 3))
flatten = Flatten()(conv_3)
dense_1 = dense_f(flatten, 256)
output = Dense(7, activation='softmax')(dense_1)
model = Model(inputs=[inputs], outputs=[output])
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
这一改变解决了错误,模型现在可以毫无问题地编译和拟合训练数据。