首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用model.predict输出作为另一个模型的输入

使用model.predict输出作为另一个模型的输入
EN

Stack Overflow用户
提问于 2018-06-13 10:35:33
回答 1查看 1.3K关注 0票数 2

我正在尝试使用model.predict的输出作为另一个模型的输入。这实际上是为了调试目的,这也是为什么我不使用get_layer.output或使用统一这两个模型的全局模型的原因。

我遇到了这个错误:

代码语言:javascript
复制
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.

下面是我当前的代码:

我使用下面的函数作为瓶颈生成器

代码语言:javascript
复制
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以保存瓶颈值是造成两个模型之间差异的原因。

EN

回答 1

Stack Overflow用户

发布于 2018-06-13 19:56:51

所以基本上你想使用一个模型的预测作为第二个模型的输入?在你的代码中,你混淆了张量和“普通”的python数据结构,这是不能工作的,因为你必须用张量构建孔计算图。

我猜你想使用第一个模型的“预测”,并添加一些其他功能来进行第二个模型的预测?在这种情况下,你可以这样做:

代码语言:javascript
复制
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, ...)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50828330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档