带有 dtype 字符串的 MXNet NDArray?
MXNet NDArray with dtype string?
我想用 MXNet 训练一个 CV 网络,我创建了一个自定义数据集 class(效果很好)但我现在想要这个 class 到 return 的名称图像文件(字符串)。
问题是 MXNet 拒绝批处理字符串。
所以我尝试从我的字符串创建一个 NDArray,但 NDArray 不会将字符串作为数据类型。我该怎么办?
>>> import numpy as np
>>> import mxnet.ndarray as nd
>>> nd.array(["blabla"])
ValueError: could not convert string to float: blabla
@Manon Rmn,解决方案是使用自定义 Batchify 函数。
import mxnet as mx
import numpy as np
from gluonnlp.data.batchify import Tuple, Stack
class MyDataset(mx.gluon.data.Dataset):
def __init__(self, size=10):
self.size = size
self.data = [np.array((1,2,3,4))]*size
self.data_text = ["this is a test"]*size
def __getitem__(self, idx):
return self.data[idx], self.data_text[idx]
def __len__(self):
return self.size
dataset = MyDataset()
print(dataset[0])
class List:
def __call__(self, x):
return x
data = mx.gluon.data.DataLoader(dataset, batchify_fn=Tuple(Stack(), List()), batch_size=2)
for matrix, text in data:
break
print(matrix)
print(text)
(array([1, 2, 3, 4]), 'this is a test')
[[1 2 3 4]
[1 2 3 4]]
<NDArray 2x4 @cpu_shared(0)>
['this is a test', 'this is a test']
我已发布 PR 以将其纳入 GluonNLP https://github.com/dmlc/gluon-nlp/pull/812
我想用 MXNet 训练一个 CV 网络,我创建了一个自定义数据集 class(效果很好)但我现在想要这个 class 到 return 的名称图像文件(字符串)。
问题是 MXNet 拒绝批处理字符串。
所以我尝试从我的字符串创建一个 NDArray,但 NDArray 不会将字符串作为数据类型。我该怎么办?
>>> import numpy as np
>>> import mxnet.ndarray as nd
>>> nd.array(["blabla"])
ValueError: could not convert string to float: blabla
@Manon Rmn,解决方案是使用自定义 Batchify 函数。
import mxnet as mx
import numpy as np
from gluonnlp.data.batchify import Tuple, Stack
class MyDataset(mx.gluon.data.Dataset):
def __init__(self, size=10):
self.size = size
self.data = [np.array((1,2,3,4))]*size
self.data_text = ["this is a test"]*size
def __getitem__(self, idx):
return self.data[idx], self.data_text[idx]
def __len__(self):
return self.size
dataset = MyDataset()
print(dataset[0])
class List:
def __call__(self, x):
return x
data = mx.gluon.data.DataLoader(dataset, batchify_fn=Tuple(Stack(), List()), batch_size=2)
for matrix, text in data:
break
print(matrix)
print(text)
(array([1, 2, 3, 4]), 'this is a test')
[[1 2 3 4]
[1 2 3 4]]
<NDArray 2x4 @cpu_shared(0)>
['this is a test', 'this is a test']
我已发布 PR 以将其纳入 GluonNLP https://github.com/dmlc/gluon-nlp/pull/812