使用mxnet和NDarry训练CNN模型

时间:2018-05-18 23:11:53

标签: python opencv3.0 mxnet convolutional-neural-network

我尝试使用cv2将20张图像转换为ndarry,然后使用ndarry训练CNN模型(mxnet)。首先,我将具有各种像素的彩色图像转换为灰色和128 x 128像素图像。所以在第二个for循环结束时,我得到了一个(20,128,128)ndarry。我使用ndarry iter函数(mxnet)迭代ndarry进行训练和评估。当我运行其余代码时,我收到以下错误消息:

$status : sold, paid, notpaid, on demand;

@else if($status == sold){
   .badge{
      color: red;
   }
}

@else if ($status == paid){
    .badge{
       color: green;
    }
]
@else if($status == returned{
   .badge{
       color: blue;
   }
]
@else if ($status == notpaid{
   .badge{
      color: yellow;
   }
}
else{
  .badge{
    color : black;
}

以下是代码:

Traceback (most recent call last):
  File "mx_n.py", line 43, in <module>
    train_iter = mx.io.NDArrayIter(datan[:ntrain, :], label[:ntrain], batch_size, shuffle=True)
IndexError: too many indices for array

我将我的代码与mxnet网站上的示例代码进行了比较,但我似乎无法找到错误的内容。你能救我吗?

1 个答案:

答案 0 :(得分:1)

所以看起来datan导致了这个问题。您正在从其他arrray列表中创建一个numpy数组,但如果这些子数组不是兼容的形状,则会获得一个数组列表,而不是多维数组。如果你认为它不是一个多维数组,你可以解决这个问题。

import numpy as np

a = np.array([1,2,3,4])
b = np.array([4,5,6])
data1 = np.array([a, b])
print(data1)
### [array([1, 2, 3, 4]) array([4, 5, 6])]

如果ab具有不兼容的形状(在这种情况下是不同长度的1d数组),则结果将是数组列表,而不是多维数组。

print(data1[1,2])
### IndexError: too many indices for array

因此,如果我们在两个轴上切片,则会出现错误。相反,我们必须索引以在列表中获取正确的数组,然后再次切片。

print(data1[1][2])
### 6

如果数组与形状兼容,numpy会将所有内容连接成一个多维数组,然后您就可以沿两个轴进行索引。

c = np.array([1,2,3])
d = np.array([4,5,6])
data2 = np.array([c, d])
print(data2)
### [[1 2 3]
### [4 5 6]]

print(data2[1,2])
### 6

所以要解决这个问题,要么改变你的索引方式,要么强制输入数组的形状相同(例如通过裁剪)。