我正在尝试训练一种用于情感识别的模型,该模型使用VGG图层的输出之一作为输入。
我可以通过第一步运行预测,保存提取的特征,然后将其用作网络的输入来管理我想要的东西,但是我正在寻找一种可以立即完成整个过程的方法。
第二个模型使用要素映射的级联数组作为输入(我正在处理视频数据),因此无法简单地将其连接到VGG的输出。
我尝试以这种方式使用tf.data.dataset
API文档中所述的映射操作:
def trimmed_vgg16():
vgg16 = tf.keras.applications.vgg16.VGG16(input_shape=(224,224,3))
trimmed = tf.keras.models.Model(inputs=vgg16.get_input_at(0),
outputs=vgg16.layers[-3].get_output_at(0))
return trimmed
vgg16 = trimmed_vgg16()
def _extract_vgg_features(images, labels):
pred = vgg16_model.predict(images, batch_size=batch_size, steps=1)
return pred, labels
dataset = #load the dataset (image, label) as usual
dataset = dataset.map(_extract_vgg_features)
但是我遇到了这个错误:Tensor Tensor("fc1/Relu:0", shape=(?, 4096), dtype=float32) is not an element of this graph
,这很明显。我被困在这里,因为我看不到将训练好的模型插入同一张图中并“即时”获得预测的好方法。
是否有一种干净的方法可以做到这一点或类似的方法?
编辑:错过了一行。
Edit2:添加了详细信息
答案 0 :(得分:0)
您应该能够通过首先创建vgg16
并随后检索模型的输出来连接各层,然后再将该张量用作您自己的网络的输入。
vgg16 = tf.keras.applications.vgg16.VGG16(input_shape=(224,224,3))
network_input = vgg16.get_input_at(0)
vgg16_out = vgg16.layers[-3].get_output_at(0) # use this tensor as input to your own network