Python 概率不在[0,1]内的神经网络退出问题调试

Python 概率不在[0,1]内的神经网络退出问题调试,python,debugging,neural-network,pytorch,torch,Python,Debugging,Neural Network,Pytorch,Torch,我试图用torch给我的神经网络(NN)加一个下降率,结果我得到了一个奇怪的错误。我怎样才能修好它 因此,我的想法是在函数中编写一个NN,使其更易于调用。功能如下: (我个人认为问题出在NN的类内部,但为了有一个有效的示例,我把所有的东西都放进去了) 当我调用函数时: net = train_neural_network(data_train_X = data_train_X, data_train_Y = data_train_Y, batch_size = batch_size, learn

我试图用torch给我的神经网络(NN)加一个下降率,结果我得到了一个奇怪的错误。我怎样才能修好它

因此,我的想法是在函数中编写一个NN,使其更易于调用。功能如下: (我个人认为问题出在NN的类内部,但为了有一个有效的示例,我把所有的东西都放进去了)

当我调用函数时:

net = train_neural_network(data_train_X = data_train_X, data_train_Y = data_train_Y, batch_size = batch_size, learning_rate = learning_rate, dropout = 0.1)
错误如下:

net = train_neural_network(data_train_X = data_train_X, data_train_Y = data_train_Y, batch_size = batch_size, learning_rate = learning_rate, dropout = 0.1)

/usr/local/lib/python3.6/dist-packages/torch/nn/modules/dropout.py in __init__(self, p, inplace)
      8     def __init__(self, p=0.5, inplace=False):
      9         super(_DropoutNd, self).__init__()
---> 10         if p < 0 or p > 1:
     11             raise ValueError("dropout probability has to be between 0 and 1, "
     12                              "but got {}".format(p))

RuntimeError: bool value of Tensor with more than one value is ambiguous
net=训练神经网络(数据训练X=数据训练X,数据训练Y=数据训练Y,批量大小=批量大小,学习率=学习率,辍学率=0.1)
/usr/local/lib/python3.6/dist-packages/torch/nn/modules/dropout.py in_u____________(self,p,in place)
8定义初始值(self,p=0.5,inplace=False):
9超级(_辍学者,自我)。uuu初始()
--->10如果p<0或p>1:
11提升值错误(“辍学概率必须介于0和1之间,”
12“但得到{}”。格式(p))
RuntimeError:具有多个值的张量的布尔值不明确
你为什么认为有错误

在设定下降率之前,一切都正常。如果您知道如何
在我的网络中实施偏见!例如,在隐藏层上。我在网上找不到任何示例。

为此更改您的体系结构:

类神经网络(nn.Module):
def_uuuinit_uuu(self,input_size,hidden_size,num_classes,p=dropout):
super(NeuralNet,self)。\uuuu init\uuuuu()
self.fc1=nn.Linear(输入大小、隐藏大小)
self.fc2=nn.Linear(隐藏大小,隐藏大小)
self.fc3=nn.Linear(隐藏大小、数量类)
self.dropout=nn.dropout(p=p)
def前进(自身,x):
out=F.relu(自身fc1(x))
out=F.relu(自身fc2(out))
退出=自我退出(自我fc3(退出))
返回

让我知道它是否有效。

那么您是否正在转换p?你为什么要提出这个条件?我的班级定义中出现的问题在哪里?我在努力理解。非常感谢尼古拉斯的帮助。对不起,我之前的回答似乎是错的。试试我的新编辑。你确定我们要删除好的系数吗?人们怎么知道什么是“好”系数?所有神经元都有被归零的概率,所以这才是最重要的对不起,我的意思是好的,关于最初的问题,只在隐藏层中删除系数:)
net = train_neural_network(data_train_X = data_train_X, data_train_Y = data_train_Y, batch_size = batch_size, learning_rate = learning_rate, dropout = 0.1)

/usr/local/lib/python3.6/dist-packages/torch/nn/modules/dropout.py in __init__(self, p, inplace)
      8     def __init__(self, p=0.5, inplace=False):
      9         super(_DropoutNd, self).__init__()
---> 10         if p < 0 or p > 1:
     11             raise ValueError("dropout probability has to be between 0 and 1, "
     12                              "but got {}".format(p))

RuntimeError: bool value of Tensor with more than one value is ambiguous