tensorflow训练数据 loss一直在变,但accuracy: 0.0000e+00

之前测试多分类用softmax做最后的激活函数,它的predict值是1D数组,值在0~1且全加起来为1,此时我使用的metrics=[ tf.keras.metrics.SparseCategoricalAccuracy ]多分类正确值,没有问题。
这次是二分类,我觉得就没必要用softmax了,使用了sigmoid,metrics用了tf.keras.metrics.Accuracy()。官网说的比较模糊,结果出现如下:
在这里插入图片描述
之后看到这里https://blog.csdn.net/bcfdeCSDN/article/details/107975554说Accuracy()是比较两数真值,而sigmoid只输出0~1之间的小数,需要判断它和0.5的大小关系决定它归为哪一类。
解决方法也简单,改metrics=[“acc”],他有给小数自动归类的功能。更多判断方法去tensorflow里看这里贴不了链接,反正我太长不看。

0 [D loss: 27.7739 | D accuracy: 0.3945] [G loss: 0.5935] 10 [D loss: 3.4065 | D accuracy: 0.4756] [G loss: 0.4708] 20 [D loss: 1.0617 | D accuracy: 0.4932] [G loss: 0.3907] 30 [D loss: 0.4685 | D accuracy: 0.5010] [G loss: 0.3452] 40 [D loss: 0.4282 | D accuracy: 0.5029] [G loss: 0.2935] 50 [D loss: 0.4418 | D accuracy: 0.5010] [G loss: 0.2533] 60 [D loss: 0.4681 | D accuracy: 0.5000] [G loss: 0.2102] 70 [D loss: 0.4935 | D accuracy: 0.5010] [G loss: 0.1848] 80 [D loss: 0.5328 | D accuracy: 0.5000] [G loss: 0.1551] 90 [D loss: 0.5862 | D accuracy: 0.5000] [G loss: 0.1353] 100 [D loss: 0.6362 | D accuracy: 0.5000] [G loss: 0.1180] 110 [D loss: 0.6906 | D accuracy: 0.5000] [G loss: 0.1118] 120 [D loss: 0.7442 | D accuracy: 0.5000] [G loss: 0.1069] 130 [D loss: 0.8013 | D accuracy: 0.5000] [G loss: 0.0927] 140 [D loss: 0.8914 | D accuracy: 0.5000] [G loss: 0.0890] 150 [D loss: 0.9282 | D accuracy: 0.5000] [G loss: 0.0813] 160 [D loss: 1.0060 | D accuracy: 0.5000] [G loss: 0.0824] 170 [D loss: 1.0463 | D accuracy: 0.5000] [G loss: 0.0768] 180 [D loss: 1.1112 | D accuracy: 0.5000] [G loss: 0.0717] 190 [D loss: 1.1701 | D accuracy: 0.5000] [G loss: 0.0714] 200 [D loss: 1.2382 | D accuracy: 0.5000] [G loss: 0.0713] 210 [D loss: 1.2589 | D accuracy: 0.5000] [G loss: 0.0684] 220 [D loss: 1.2989 | D accuracy: 0.5000] [G loss: 0.0718] 230 [D loss: 1.3802 | D accuracy: 0.5000] [G loss: 0.0725] 240 [D loss: 1.3687 | D accuracy: 0.5000] [G loss: 0.0629] 250 [D loss: 1.3898 | D accuracy: 0.5000] [G loss: 0.0619] 260 [D loss: 1.4334 | D accuracy: 0.5000] [G loss: 0.0606] 270 [D loss: 1.4728 | D accuracy: 0.5000] [G loss: 0.0614]
最新发布
03-24
### GAN 训练过程中的判别器 (D) 和生成器 (G) 的损失及准确率化趋势分析 在生成对抗网络(GAN)的训练过程中,判别器 \( D \) 和生成器 \( G \) 的损失函数以及它们的表现会随着迭代次数的化而呈现出特定的趋势。这种动态平衡对于理解 GAN 的收敛性和性能至关重要。 #### 判别器 \( D \) 的损失和准确率 - **初始阶段**:训练初期,由于生成器尚未学会有效伪造样本,因此判别器能够轻松区分真实数据与生成的数据。此时,\( D \) 的损失通常较低,其分类准确率接近于 100%[^4]。 - **中间阶段**: 随着生成器逐渐改进并生成更逼真的样本,判别器的任务得更具挑战性。在此期间,\( D \) 的损失可能会增加,同时其分类准确率下降至约 50%,这表明它难以分辨真假样本[^4]。 - **后期阶段**: 如果 GAN 收敛良好,则最终 \( D \) 应该达到一种稳定状态,在此状态下它的平均输出概率趋近于 0.5 对应所有输入样本,意味着无法可靠地区分真伪样本[^4]。 #### 生成器 \( G \) 的损失 - **早期行为**: 起初因为产生的图像质量较差,所以通过欺骗不了多少次测试从而导致较高的失败惩罚即较大数值的loss;但随着时间推移当假图片越来越像真品时这个值就会慢慢减少下来直到趋于平稳为止[^4]。 以下是用于监控上述指标的一个简单 Python 实现例子: ```python import matplotlib.pyplot as plt def plot_gan_metrics(d_loss_real, d_loss_fake, g_loss, accuracies): epochs = range(len(d_loss_real)) plt.figure(figsize=(12,8)) # Plotting Discriminator Losses plt.subplot(2, 1, 1) plt.plot(epochs, d_loss_real, label='Discriminator Real Loss') plt.plot(epochs, d_loss_fake, label='Discriminator Fake Loss') plt.xlabel('Epochs') plt.ylabel('Loss') plt.legend() # Plotting Generator Loss and Accuracy plt.subplot(2, 1, 2) plt.plot(epochs, g_loss, label='Generator Loss', color='orange') plt.twinx().plot(epochs, accuracies, 'r--', label='Discriminator Accuracy') plt.xlabel('Epochs') plt.ylabel('Value') plt.title('Generator Loss & Discriminator Accuracy Over Time') plt.legend() plt.tight_layout() plt.show() ``` 以上脚本可以帮助可视化整个训练周期内的这些重要参数如何演,进而评估模型健康状况及其优化进展程度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值