Mxnet 数据类型是 float64,但一直说它是 float32
Mxnet datatype is float64, but keeps saying that it's float32
我是 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)
我像上面那样定义了我的自定义数据集,并将数据类型设置为 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还是float32?尝试将权重转换为 float64:
net = net.cast('float64')
也就是说,根据我的经验,在 float64 中训练 DL 模型并不常见,float32 和 float16 在训练中更为常见。 MXNet 允许您轻松使用 float16 精度进行训练 explicitly, or automatically with the AMP tool (Automatic Mixed Precision)
您应该不直观地将输入数据转换为 float32(而不是 float64)。
尽管错误似乎与此建议完全相反,但此失败的检查是从网络中的低级操作向上传播的,最有可能采用以下形式:(input * weight) + bias
.
由于 input
是计算的第一个变量,它将其他变量(权重和偏差)的预期数据类型设置为 float64。所以检查实际上是在抱怨 weight
的数据类型是 float32,而预期是 float64。
我是 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)
我像上面那样定义了我的自定义数据集,并将数据类型设置为 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还是float32?尝试将权重转换为 float64:
net = net.cast('float64')
也就是说,根据我的经验,在 float64 中训练 DL 模型并不常见,float32 和 float16 在训练中更为常见。 MXNet 允许您轻松使用 float16 精度进行训练 explicitly, or automatically with the AMP tool (Automatic Mixed Precision)
您应该不直观地将输入数据转换为 float32(而不是 float64)。
尽管错误似乎与此建议完全相反,但此失败的检查是从网络中的低级操作向上传播的,最有可能采用以下形式:(input * weight) + bias
.
由于 input
是计算的第一个变量,它将其他变量(权重和偏差)的预期数据类型设置为 float64。所以检查实际上是在抱怨 weight
的数据类型是 float32,而预期是 float64。