Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Spyder中运行Pytorch神经网络时出现属性错误_Python_Pytorch_Multiprocessing_Spyder_Attributeerror - Fatal编程技术网

Python 在Spyder中运行Pytorch神经网络时出现属性错误

Python 在Spyder中运行Pytorch神经网络时出现属性错误,python,pytorch,multiprocessing,spyder,attributeerror,Python,Pytorch,Multiprocessing,Spyder,Attributeerror,我试图运行一个神经网络来了解更多关于分类嵌入的知识(这里是神经网络代码的示例),但是Spyder在最后尝试运行循环后给出了AttributeError 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“C:\Workspace\Python\u Runtime\Python\lib\multiprocessing\spawn.py”,第116行,在spawn\u main中 exitcode=_main(fd,父节点_sentinel) 文件“C:\Workspace\Python\u

我试图运行一个神经网络来了解更多关于分类嵌入的知识(这里是神经网络代码的示例),但是Spyder在最后尝试运行循环后给出了AttributeError

回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“C:\Workspace\Python\u Runtime\Python\lib\multiprocessing\spawn.py”,第116行,在spawn\u main中 exitcode=_main(fd,父节点_sentinel) 文件“C:\Workspace\Python\u Runtime\Python\lib\multiprocessing\spawn.py”,第126行,在\ u main中 self=reduce.pickle.load(从父级) AttributeError:无法在上获取属性“TablerDataSet”

我的理解是,这是因为Spyder在多处理功能方面存在问题

正如一些答案所暗示的那样,我已经尝试过将所有不在类或def中的内容包装起来

if __name__ == '__main__':
但这似乎没有帮助,错误仍然会出现

我还尝试导入多进程包,而不是多进程,但没有帮助。我想我需要去更改spawn.py文件中的行,但不确定具体如何更改

问题是,在我目前的电脑上,我只有Spyder。我试着用Pycharm在家里的个人电脑上的另一个数据集上运行相同的代码,它工作正常,没有任何错误

有人知道我如何解决Spyder中的问题吗

我使用的神经网络代码如下:

来自torch.utils.data导入数据集,数据加载器
类tablerDataSet(数据集):
定义初始值(自身、数据、类别=无、输出列=无):
"""
描述PyTorch的数据集的特征
参数
----------
数据:熊猫数据帧
输入数据的数据框对象。它必须
包含所有连续的、分类的和
要使用的输出列。
目录:字符串列表
数据中分类列的名称。
这些列将通过嵌入
模型中的图层。这些列必须是
预先编码的标签。
输出列:字符串
数据中输出变量列的名称
假如
"""
self.n=data.shape[0]
如果输出_col:
self.y=data[output\u col].astype(np.float32).values.reformate(-1,1)
其他:
self.y=np.zero((self.n,1))
self.cat\u cols=如果cat\u cols为else,则为cat\u cols[]
self.cont_cols=[col for col in data.columns
如果列不在self.cat_cols+[output_col]]
如果self.cont\u cols:
self.cont_X=数据[self.cont_cols].astype(np.float32).值
其他:
self.cont_X=np.zero((self.n,1))
如果self.cat_cols:
self.cat\u X=data[cat\u cols].astype(np.int64).值
其他:
self.cat_X=np.zero((self.n,1))
定义(自我):
"""
表示样本总数。
"""
返回自我
def uu getitem uu(self,idx):
"""
生成一个数据样本。
"""
返回[self.y[idx],self.cont\u X[idx],self.cat\u X[idx]]
进口火炬
导入torch.nn作为nn
导入torch.nn.功能为F
类前馈nn(nn.模块):
定义初始(自、emb dims、无连续、林层大小、,
输出\u大小、emb\u辍学、lin\u层\u辍学):
"""
参数
----------
emb_dims:两个元素元组的列表
此列表将包含每个元素的两个元素元组
分类特征。元组的第一个元素将
表示类别的唯一值的数目
第二个元素将表示嵌入
用于该特征的尺寸。
否\u of \u cont:整数
数据中连续要素的数量。
林层大小:整数列表。
每个线性层的大小。长度将相等
总数
网络中线性层的数量。
输出大小:整数
最终输出的大小。
emb_辍学:浮动
嵌入层后要使用的下拉列表。
lin_layer_辍学:浮动列表
在每个线性层之后使用的辍学。
"""
super()。\uuuu init\uuuuu()
#嵌入层
self.emb_layers=nn.ModuleList([nn.Embedding(x,y))
对于x,y,在emb_dims中])
无emb=总和(y代表x,y代表emb)
self.no_of_embs=no_of_embs
self.no_of_cont=no_of_cont
#线性层
第一层=nn.线性(EMB的自编号+cont的自编号,
林_层_大小[0])
self.lin\u layers=nn.ModuleList([first\u lin\u layer]+[nn.Linear(lin\u layer\u大小[i],lin\u layer\u大小[i+1]),用于范围内的i(len(lin\u layer\u大小)-1)])
对于self.linu层中的linu层:
nn.init.kaiming\u normal\u(lin\u layer.weight.data)
#输出层
self.output\u layer=nn.Linear(lin\u layer\u大小[-1],
输出(单位大小)
nn.init.kaiming\u normal\u(self.output\u layer.weight.data)
#批量标准层
self.first\u bn\u layer=nn.BatchNorm1d(self.no\u of\u cont)
self.bn_layers=nn.ModuleList([nn.BatchNorm1d(大小)
对于lin中的大小(图层大小])
#辍学层
self.emb\u dropout\u layer=nn.dropout(emb\u dropout)
self.droput_layers=nn.ModuleList([nn.Dropout(大小))
对于lin_层中的大小(辍学)])
def转发(自身、连续数据、cat数据):
如果没有EMB!=0:
x=[emb_层(cat_数据[:,i])
对于i,枚举中的emb_层(self.emb_层)]
x=火炬类别(x,1)
x=自emb\u脱落层(x)
如果self.no\u of\u cont!=0:
标准化的连续数据=自身第一层(连续数据)
如果没有EMB!=0:
x=火炬.cat([x,标准化控制数据],1)
其他:
x=标准化的连续数据
对于lin_层、dropout_层、bn_层\
zip(self.lin\u层、self.droput\u层、self.bn\u层):
x=F.relu(林_层(x))
x=bn_层(x)
x=脱落层(x)
x=自输出层(x)