【问题标题】:Mxnet datatype is float64, but keeps saying that it's float32Mxnet 数据类型是 float64,但一直说是 float32
【发布时间】:2020-01-13 08:02:01
【问题描述】:

我是 pytorch 和 tensorflow 用户。为了使用 AWS sagemaker 的弹性推理,我遇到了 Mxnet。

Mxnet gluon dataset api 好像和pytorch的dataset很像。

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)

我像上面一样定义了我的自定义数据集,并将数据类型设置为 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)

net(data) 中的错误上升,错误信息如下所示。

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?在 DL 工作负载中使用 float32 精度更为常见,有时甚至使用 float16 进行训练以利用混合精度硬件,例如 NVIDIA V100 的 TensorCores

标签: python mxnet


【解决方案1】:

您应该不直观地将输入数据转换为 float32(而不是 float64)。

尽管错误似乎与此建议完全相反,但此失败的检查是从网络中的低级别操作向上传播的,很可能是以下形式:(input * weight) + bias

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

【讨论】:

    【解决方案2】:

    您的网络是 float64 还是 float32?尝试将权重转换为 float64:

    net = net.cast('float64')

    话虽如此,根据我的经验,在 float64 中训练 DL 模型并不常见,float32 和 float16 更常见于训练。 MXNet 允许您轻松使用 float16 精度进行训练,explicitly,或自动使用 AMP tool (Automatic Mixed Precision)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-07
      • 2018-01-30
      • 2014-10-27
      • 1970-01-01
      • 2016-07-12
      • 2021-04-30
      相关资源
      最近更新 更多