python-3.x - 使用 model.predict 输出作为另一个模型的输入
问题描述
我正在尝试将 的输出model.predict
用作另一个模型的输入。这实际上是出于调试目的,以及为什么我不使用get_layer.output
或使用统一这两个模型的全局模型。
我遇到了这个错误:
TypeError: Cannot interpret feed_dict key as Tensor: Tensor Tensor("input_1:0", shape=(?, 10, 10, 2048), dtype=float32) is not an element of this graph.
这是我当前的代码:
我正在使用下面的函数作为生成器的瓶颈
def test_model_predictions(params):
batch_size = params['batch_size'] #params just contains model parameters
base_model = create_model() #this just creates an instance of Inception model with final layers cutoff
train,_ = create_generators(params) #creats a generator for image files
while True:
for x, y in train:
predict1 = base_model.predict(x)
yield (predict1, y)
def training_bottleneck():
bottleneck_train = test_model_predictions(params) #generator
def bottleneck_model_1():
bottleneck_input = Input(shape = (10, 10, 2048))
x = GlobalAveragePooling2D()(bottleneck_input)
x = Dense(1024, activation='relu')(x)
predictions = Dense(params['classes'], activation='softmax')(x)
model = Model(inputs=bottleneck_input, outputs=predictions)
return model
model2 = bottleneck_model_1()
model2.compile(optimizer= optimizers.SGD(lr=0.0001, momentum=0.99),
loss='categorical_crossentropy', metrics = ['accuracy'])
print('Starting model training')
history = model2.fit_generator(bottleneck_train,
steps_per_epoch = 1000,
epochs = 85,
shuffle= False,
verbose = 2, )
return history
关于如何进行这项工作的任何线索?
谢谢你。
编辑:对于我为什么这样做似乎有些困惑,所以我将添加更多信息。
我专门使用predict
,因为在将 model.predict 值(瓶颈值)保存到 hdf5 文件,然后将这些值加载到另一个模型(原始模型的后半部分)时,我注意到了差异,
与仅加载整个模型并仅冻结上半部分(无法训练前半部分)相比。尽管使用相同的超参数并且本质上是相同的模型,但我注意到的不同之处在于,完整的模型可以正确训练并收敛,而加载瓶颈值的模型并没有真正改善。因此,我试图看到我融合 model.predict
以保存瓶颈值是两个模型之间差异的原因。
解决方案
所以基本上你想使用一个模型的预测作为第二个模型的输入?在您的代码中,您将张量和“普通”python 数据结构混合在一起,因为您必须使用张量构建孔计算图,所以它们无法工作。
我猜您想使用第一个模型的“预测”并添加一些其他功能来使用第二个模型进行预测?在这种情况下,您可以像这样执行 soemthign:
from keras.layers import Input, Dense, concatenate
input_1= Input(shape=(32,))
input_2= Input(shape=(64,))
out_1= Dense(48, input_shape=(32,))(input_1) # your model 1
x = concatenate([out_1, input_2]) # stack both feature vectors
x = Dense(1, activation='sigmoid')(x) # your model 2
model = Model(inputs=[input_1, input_2], outputs=[x]) # if you want the outputs of model 1 you can add the output out1
history = model.fit([x_train, x_meta_train], y_train, ...)
推荐阅读
- python-3.x - 对字典进行排序
- c# - 将信息数组从角度传递给接收模型对象的asp网络控制器
- oracle - 如何跨多个模式从表中删除分区?
- bash - 批量重命名图像文件但保持扩展名相同 linux
- symfony - 在网站上进行即时通讯的最佳方式是什么?
- bash - 无法使用 shell 命令删除重复的字符串
- react-native - 未定义不是对象(评估'items.reduce)
- python - Python,在列表列表中编码字符串
- python - 在scrapy中调用几个回调函数
- javascript - 如何修复 TypeError:null 不是对象(评估“resetButton.addEventListener”)