在用pytorch运行联邦学习程序时,损失值出现负值,如下:
出现这种情况,我们可以用以下解决方法:
在定义的模型里把 self.softmax = nn.Softmax(dim=1) 改成
self.softmax = nn.LogSoftmax(dim=1)
在代码里如下:
修改后的执行结果如下:
因为交叉熵有个负对数,所以当网络输出的概率是0-1时,损失值为正数。而当网络输出大于1的数,就有可能变成负数。因此需要添加一行
out1 = F.softmax(out1, dim=1)
原文链接:https://www.jb51.net/article/190282.htm
(但是我没实现过,因为我找不到地方添加)
把输入数据进行归一化,归一化函数代码如下:
def data_in_one(inputdata):
min = np.nanmin(inputdata)
max = np.nanmax(inputdata)
outputdata = (inputdata-min)/(max-min)
return outputdata
原文链接:https://blog.csdn.net/weixin_36670529/article/details/115752369?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control
(但是这个方法我也没实现过,不知道怎么调用这个函数)