【发布时间】:2020-01-05 19:17:43
【问题描述】:
我有一个单输入多输出的神经网络模型,其最后一层是
out1 = Dense(168, activation = 'softmax')(dense)
out2 = Dense(11, activation = 'softmax')(dense)
out3 = Dense(7, activation = 'softmax')(dense)
model = Model(inputs=inputs, outputs=[out1,out2,out3])
每张图片的 Y-labels 如下
train
>>
image_id class_1 class_2 class_3
0 Train_0 15 9 5
1 Train_1 159 0 0
...
...
...
453651 Train_453651 0 15 34
453652 Train_453652 18 0 7
编辑:-
train.iloc[:,1:4].nunique()
>>
class_1 168
class_2 11
class_3 7
dtype: int64
那么看看这些不同范围的类,我应该使用categorical_crossentropy 还是sparse_categorical_crossentropy?对于下面给出的代码,我应该如何在流程中使用Y_labels?
imgs_arr = df.iloc[:,1:].values.reshape(df.shape[0],137,236,1)
# 32332 columns representing pixels of 137*236 and single channel images.
# converting it to (samples,w,h,c) format
Y = train.iloc[:,1:].values #need help from here
image_data_gen = ImageDataGenerator(validation_split=0.25)
train_gen = image_data_gen.flow(x=imgs_arr, y=Y, batch_size=32,subset='training')
valid_gen = image_data_gen.flow(x=imgs_arr,y=Y,subset='validation')
这是传递Y或使用Y=[y1,y2,y3]的正确方法吗
y1=train.iloc[:,1].values
y2=train.iloc[:,2].values
y3=train.iloc[:,3].values
【问题讨论】:
-
作为任何 numpy 数组,您将传递给普通的
fit方法。 -
您可能需要一个具有三个输出的模型,每个输出都有一个
'softmax'和一个'sparse_categorical_crossentropy',并且您可能不需要更改数组上的任何内容。它只需要与图像的顺序相同。 -
@DanielMöller 你的意思是一个 3D、one-hot 编码的数组?
-
我的意思是三个输出张量,所有三个张量都是二维的,与分类分类模型的任何其他二维完全相同。如果您使用数字标签,请使用三个
'sparse_categorical_crossentropy'损失。如果使用 one-hot 标签,则使用三个'categorical_crossentropy'loss。 -
使用
y = [y1, y2, y3]
标签: python keras neural-network conv-neural-network