我尝试使用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网站上的示例代码进行了比较,但我似乎无法找到错误的内容。你能救我吗?
答案 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])]
如果a
和b
具有不兼容的形状(在这种情况下是不同长度的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
所以要解决这个问题,要么改变你的索引方式,要么强制输入数组的形状相同(例如通过裁剪)。