python 中的 mxnet ndarray 索引
mxnet ndarray indexing in python
我是 mxnet 的新手。我刚刚在装有 CUDA 8.0 和 cudnn 7.0.5 的 Ubuntu 14.04 机器上安装了 mxnet 1.0.0 和 python 3.5。
我的代码如下。我正在尝试将图像数据存储在 ndarray 中。 (原代码见https://github.com/ypwhs/DogBreed_gluon/blob/master/get_features_v3.ipynb)
-
X_224 = nd.zeros((n, 3, 224, 224))
X_299 = nd.zeros((n, 3, 299, 299))
mean = np.array([0.485, 0.456, 0.406])
std = np.array([0.229, 0.224, 0.225])
for i, (fname, breed) in tqdm(df.iterrows(), total=n):
img = cv2.imread('data/train/%s.jpg' % fname)
img_224 = ((cv2.resize(img, (224, 224))[:, :, ::-1] / 255.0 - mean) / std).transpose((2, 0, 1))
img_299 = ((cv2.resize(img, (299, 299))[:, :, ::-1] / 255.0 - mean) / std).transpose((2, 0, 1))
X_224[i] = nd.array(img_224) <-- I get error in this line
X_299[i] = nd.array(img_299)
这是我得到的错误:
ValueError: Indexing NDArray with index=0 and type=class 'numpy.int64' is not supported.
我假设它必须与索引多维 nd 数组有关。所以我尝试切片 - X_224[i:i+1] = ....
但这给了我另一个错误。
您可以将索引的类型从 numpy.int64
转换为 int
;例如i = int(i)
在尝试设置切片之前。
df.iterrows()
returns 元组,其中第一个元素的类型取决于数据帧索引的类型。 df.iterrows()
返回类型元组 (int
,pandas.core.series.Series
) 当 运行 Github 示例时,所以我不需要转换(使用 Pandas 0.22).
除了这个特定问题之外,您可能还想查看 Gluon 数据集和数据加载器以完成此任务。 mxnet.gluon.data.vision.datasets.ImageFolderDataset
可用于加载图片,它通过transform
参数接受图片转换函数。
def transform_fn(data, label):
mean = np.array([0.485, 0.456, 0.406])
std = np.array([0.229, 0.224, 0.225])
data = ((cv2.resize(data, (224, 224))[:, :, ::-1] / 255.0 - mean) / std).transpose((2, 0, 1))
return data, label
image_directory = os.path.join(data_dir, "train")
dataset = mx.gluon.data.vision.ImageFolderDataset(image_directory, transform=transform_fn)
data_loader = mx.gluon.data.DataLoader(dataset, batch_size=10, shuffle=True)
for data, label in data_loader:
...
我是 mxnet 的新手。我刚刚在装有 CUDA 8.0 和 cudnn 7.0.5 的 Ubuntu 14.04 机器上安装了 mxnet 1.0.0 和 python 3.5。
我的代码如下。我正在尝试将图像数据存储在 ndarray 中。 (原代码见https://github.com/ypwhs/DogBreed_gluon/blob/master/get_features_v3.ipynb) -
X_224 = nd.zeros((n, 3, 224, 224))
X_299 = nd.zeros((n, 3, 299, 299))
mean = np.array([0.485, 0.456, 0.406])
std = np.array([0.229, 0.224, 0.225])
for i, (fname, breed) in tqdm(df.iterrows(), total=n):
img = cv2.imread('data/train/%s.jpg' % fname)
img_224 = ((cv2.resize(img, (224, 224))[:, :, ::-1] / 255.0 - mean) / std).transpose((2, 0, 1))
img_299 = ((cv2.resize(img, (299, 299))[:, :, ::-1] / 255.0 - mean) / std).transpose((2, 0, 1))
X_224[i] = nd.array(img_224) <-- I get error in this line
X_299[i] = nd.array(img_299)
这是我得到的错误:
ValueError: Indexing NDArray with index=0 and type=class 'numpy.int64' is not supported.
我假设它必须与索引多维 nd 数组有关。所以我尝试切片 - X_224[i:i+1] = ....
但这给了我另一个错误。
您可以将索引的类型从 numpy.int64
转换为 int
;例如i = int(i)
在尝试设置切片之前。
df.iterrows()
returns 元组,其中第一个元素的类型取决于数据帧索引的类型。 df.iterrows()
返回类型元组 (int
,pandas.core.series.Series
) 当 运行 Github 示例时,所以我不需要转换(使用 Pandas 0.22).
除了这个特定问题之外,您可能还想查看 Gluon 数据集和数据加载器以完成此任务。 mxnet.gluon.data.vision.datasets.ImageFolderDataset
可用于加载图片,它通过transform
参数接受图片转换函数。
def transform_fn(data, label):
mean = np.array([0.485, 0.456, 0.406])
std = np.array([0.229, 0.224, 0.225])
data = ((cv2.resize(data, (224, 224))[:, :, ::-1] / 255.0 - mean) / std).transpose((2, 0, 1))
return data, label
image_directory = os.path.join(data_dir, "train")
dataset = mx.gluon.data.vision.ImageFolderDataset(image_directory, transform=transform_fn)
data_loader = mx.gluon.data.DataLoader(dataset, batch_size=10, shuffle=True)
for data, label in data_loader:
...