模型 :
model = vgg16(weights = 'imagenet', include_top=False)
cl1 = Dense(2, activation = 'softmax',name='class_1')(x)
cl2 = Dense(2, activation = 'softmax',name='class_2')(x)
model = Model(inputs=model.input, outputs= [cl1,cl2])
loss = ['categorical_crossentropy','categorical_crossentropy']
model.compile(optimizer=opt, loss=loss , metrics=['categorical_accuracy'])
数据输入管道:
train_generator=train_datagen.flow_from_dataframe()
def custom_generator(generator):
for img_batch, lb_batch in generator:
img_batch_list = tf.data.Dataset.from_tensor_slices(img_batch)
for img,img_lb in zip(img_batch,lb_batch):
** some code block to change img_lb into tuple , value of the key in tuple is in
Tf.tensor shape(1,2) **
** eg : updated_label_tuple ={class1:[1,0],class2: [0,1]} **
yield (updated_image_batch_tensor, updated_label_batch_list)
train_ds =
val_ds=
model.fit(train_ds,
steps_per_epoch=200 ,
validation_data=val_ds,
validation_steps=40,
epochs=50,verbose=1)
错误 :
check_types=check_types) 文件“/home/samjith/anaconda3/envs/tf2/lib/python3.6/site-packages/tensorflow_core/python/data/util/nest.py”,第 299 行,在 assert_shallow_structure “输入有类型: %s。” % type(input_tree)) TypeError: 如果浅结构是一个序列,输入也必须是一个序列。输入的类型:<class 'list'>。
在这里,我必须将数据输入 2 个单独的密集层,这些层将执行 2 个不同的任务。我把它作为一个元组传递,就像这里提到的那样,但我得到了上述错误..
这是将数据输入两个密集(2)层的正确方法吗?这个bug怎么解决!!