Python 将14个数组的列表转换为单个数组(Keras值错误)
当我尝试训练我的模型时,我得到以下Keras值错误 ValueError:检查模型目标时出错:Numpy数组列表 传递给模型的大小不是模型预期的大小。 期望看到1个数组,但得到了以下14个数组的列表 阵列: 当我尝试使用以下方法重塑y_col形状时:Python 将14个数组的列表转换为单个数组(Keras值错误),python,numpy,keras,Python,Numpy,Keras,当我尝试训练我的模型时,我得到以下Keras值错误 ValueError:检查模型目标时出错:Numpy数组列表 传递给模型的大小不是模型预期的大小。 期望看到1个数组,但得到了以下14个数组的列表 阵列: 当我尝试使用以下方法重塑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.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,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\u 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
#[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
#[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
#[0, 0, 0, 0, 0, 0, 0, 0, 1]
y\u 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
#[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
#[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
#[0, 0, 0, 0, 0, 0, 0, 0, 1]
上传原始列表您是否尝试过
y\u col=[y代表y\u col]
?上传原始列表您是否尝试过y\u col=[y代表y\u col]
?y\u col最初是一个颜色列表,然后才是在生成器中分配的数字。在这种情况下,我不能直接在y列上进行“展平”。我纠正了这个问题,y列最初是一个颜色列表,只有到那时才是生成器中指定的数字。在这种情况下,我不能直接在y列上进行“展平”。我更正了这个问题