将 14 个数组的列表转换为单个数组(Keras 值错误)



当我尝试训练我的模型时,我收到以下 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]

最新更新