Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.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 Mxnet数据类型是float64,但一直说它';s浮动32_Python_Mxnet - Fatal编程技术网

Python Mxnet数据类型是float64,但一直说它';s浮动32

Python Mxnet数据类型是float64,但一直说它';s浮动32,python,mxnet,Python,Mxnet,我是pytorch和tensorflow的用户。我接触Mxnet是为了使用AWS sagemaker的弹性推理 Mxnet胶子数据集api似乎与pytorch的数据集非常相似 class CustomDataset(mxnet.gluon.data.Dataset): def __init__(self): self.train_df = pd.read_csv('/shared/KTUTOR/test_summary_data.csv') def __getit

我是pytorch和tensorflow的用户。我接触Mxnet是为了使用AWS sagemaker的弹性推理

Mxnet胶子数据集api似乎与pytorch的数据集非常相似

class CustomDataset(mxnet.gluon.data.Dataset):
    def __init__(self):
        self.train_df = pd.read_csv('/shared/KTUTOR/test_summary_data.csv')
    def __getitem__(self, idx):
        return mxnet.nd.array(self.train_df.loc[idx, ['TT', 'TF', 'FT', 'FF']], dtype='float64'), mxnet.nd.array(self.train_df.loc[idx, ['p1']], dtype='float64')
    def __len__(self):
        return len(self.train_df)
我像上面一样定义了customdataset,并将数据类型设置为float64

test_data = mxnet.gluon.data.DataLoader(CustomDataset(), batch_size=8, shuffle=True, num_workers=2)
我用DataLoader包装了我的数据集,到目前为止没有错误。 当我将数据传递到网络时,错误增加

for epoch in range(1):
for data, label in test_data:
    print(data.dtype)
    print(label.dtype)
    with autograd.record():
        output = net(data)
        loss = softmax_cross_entropy(output, label)
    loss.backward()
    trainer.step(batch_size)
网络(数据)中的错误增加,错误消息如下所示

MXNetError: [07:53:55] src/operator/contrib/../elemwise_op_common.h:135: Check failed: assign(&dattr, vec.at(i)): Incompatible attr in node  at 1-th input: expected float64, got float32
Stack trace:
  [bt] (0) /root/anaconda3/lib/python3.7/site-packages/mxnet/libmxnet.so(+0x4b09db) 
[0x7f00f96519db] ...
当我打印数据类型和标签时,它们都是float64,但MXNet告诉我数据的数据类型是float32。有人能解释为什么会这样吗?
非常感谢。

您的网络是采用float64还是float32?尝试将权重投射到浮动64:

net=net.cast('float64')


也就是说,根据我的经验,在float64中训练DL模型并不常见,而float32和float16在训练中更常见。MXNet允许您轻松地使用float16精度进行训练,或者使用

自动将输入数据转换为float32(而不是float64)

尽管错误似乎与此建议完全相反,但此失败的检查是从网络中的低级操作向上传播的,其最有可能的形式是:
(输入*权重)+bias


由于
input
是计算的第一个变量,因此它将其他变量(权重和偏差)的预期数据类型设置为float64。因此,检查实际上是在抱怨
weight
的数据类型是float32,而float64是预期的。

为什么需要float64?在DL工作负载中使用FROAT32精度更为常见,甚至FLUAT16有时也用于训练混合精密硬件,例如英伟达V100的TysRoCordes。