由于损失函数,我的模型无法训练

问题描述 投票:0回答:1
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-37-9a9cd8046c6f> in <cell line: 18>()
     16               loss=tf.keras.losses.CategoricalCrossentropy(),
     17               metrics=['accuracy'])
---> 18 history1=model1.fit(train_data,epochs=5,validation_data=valid_data)

1 frames
/usr/local/lib/python3.10/dist-packages/keras/src/backend/tensorflow/nn.py in categorical_crossentropy(target, output, from_logits, axis)
    552         )
    553     if len(target.shape) != len(output.shape):
--> 554         raise ValueError(
    555             "Arguments `target` and `output` must have the same rank "
    556             "(ndim). Received: "

ValueError: Arguments `target` and `output` must have the same rank (ndim). Received: target.shape=(None,), output.shape=(None, 19)

所以在这方面,我不明白问题是什么??

但是,当我使用 SpareCategoricalCrossentropy 训练我的模型时,它工作正常,但精度非常差,并且在有效数据中它为零。

我尝试使用SpareCategorical,但准确率很低。看到我的数据集来自kaggle,所以我刚刚下载了它并给了它一个图像大小

train_dir="Dataset/train/" test_dir="Dataset/test/" train_data= Images(train_dir,image_size=(150,150),batch_size=32) valid_data= Images(test_dir,image_size=(150,150),batch_size=32)

我想起了这一点。现在谁能告诉我我该怎么办??

python tensorflow machine-learning keras deep-learning
1个回答
0
投票

在 keras 中,

categorical_crossentropy
sparse_categorical_crossentropy
函数使用相同的损失函数。唯一的区别是您使用的目标数组的格式,详细描述见here。因此,您应该对目标数组进行 one-hot 编码才能使用
categorical_crossentropy

另一方面,精度低的问题可能是由多种原因造成的,例如学习率过高/过低、神经网络模型的浅度等。您需要在模型定义和训练方面提供有关代码的更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.