MXNet NDArray со строкой dtype? - PullRequest
0 голосов
/ 25 июня 2019

Я хочу обучить сеть CV с помощью MXNet, и я создал собственный класс набора данных (работает хорошо), но теперь я хотел бы, чтобы этот класс возвращал имя файла изображения (строка).

Проблема в том, что MXNet отказывается от пакетных строк.

Итак, я попытался создать NDArray из моей строки, но NDArray не будет принимать строки как dtype.Что мне делать?

>>> import numpy as np
>>> import mxnet.ndarray as nd
>>> nd.array(["blabla"])
ValueError: could not convert string to float: blabla

1 Ответ

0 голосов
/ 04 июля 2019

@ 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

...