当我尝试训练我的模型时,我收到以下 Keras 值错误。
值错误:检查模型目标时出错:Numpy 数组列表 您传递给模型的大小不是模型预期的大小。 预计会看到 1 个阵列,但得到以下 14 个数组的列表 阵 列:
[array([['0'],
['0'],
['0'],
['0'],
['0'],
['0'],
['0'],
['0'],
['1'],
['0'],
['0'],
['0'],
['0'],
['0'],
...
当我尝试使用以下方法重塑y_col时:
y_col = np.stack( y_col, axis=0 )
我得到:
TypeError: If class_mode="multi_output", y_col must be a list. Received ndarray.
如果我只是想这样做
y_col = np.array(y_col)
我得到同样的错误。
数据帧:
Path black grey green blue etc....
0 12345.jpg 1 0 1 0
1 12345.jpg 0 0 1 0
2 12345.jpg 1 0 0 1
3 12345.jpg 0 1 0 1
4 12345.jpg 0 0 1 1
5 12345.jpg 0 0 1 1
每个图像的模型应该是包含 14 个元素的单个数组 [0,0,1,1,0,1,0,...],但看起来您正在为每个图像传递 14 个不同的数组。
问题发生在识别产品(衣服(颜色的CNN网络中 一个产品可以有多种颜色,例如 [0.0,0,1,0,1,0,0,0,1]
最初y_col外观:
['beige',
'black',
'blue',
'brown',
'gray',
'green',
'multicolor',
'orange',
'pink',
'red',
'violet',
'white',
'yellow',
'transparent']
发电机:
def get_generator(filename, number=None):
#
df = pd.read_csv(filename, delimiter=' ', names=color_list, dtype="str")
if number:
df = df[:number]
#
gen = image.ImageDataGenerator()
#
directory = os.path.dirname(filename)
#
return gen.flow_from_dataframe(df, directory, "path", y_col = y_col , target_size=(224, 224), batch_size=32,class_mode="multi_output")
y_col
是一个包含numpy
数组的列表。
y_col = [np.array([['0'],
['0'],
['0'],
['0'],
['0'],
['0'],
['0'],
['0'],
['1']])]
用:
y_new = y_col[0].flatten()
y_new = [int(y) for y in y_new]
或在一行中:
y_new = [int(y) for y in y_col[0].flatten()]
输出:
y_new
#[0, 0, 0, 0, 0, 0, 0, 0, 1]