【问题标题】:Using keras api for a multiple output model with the same target value将 keras api 用于具有相同目标值的多输出模型
【发布时间】:2019-01-25 11:05:38
【问题描述】:

根据https://keras.io/models/model/的多输入或多输出模型,可以使用

model = Model(inputs=a1, outputs=[b1, b2])

如果 b1 和 b2 实际上是相同的目标值怎么办? IE。在几个初始层之后,模型有两个独立的“分支”,每个分支都应该给出相同的值。下面是一个非常简单的例子

a  = Input(shape=(32,))
b1 = Dense(32)(a)
b2 = Dense(32)(a)

model = Model(inputs=a, outputs=[b1,b2])

有没有比复制目标值更好/更好的拟合方法?

model.fit(x_train, [y_train, y_train])

另外,如果在拟合期间需要真正的标签(y_train)(仅),可以像这样使用它们

model.fit([x_train,y_train], [y_train, y_train])

有没有更好的解决方案?另外,如何处理预测?

model.predict([x_test, y_test_fake_labels])

【问题讨论】:

    标签: python machine-learning keras artificial-intelligence


    【解决方案1】:

    首先对于 predict 函数:model.predict(X) 将在您的情况下返回一个 numpy 数组列表。我认为您将 tensorflow 的 session.run() 与 keras 混淆了。对于单输入和多输出,请使用 model.fit(X,[y1,y2])。

    我假设您使用的是 Keras 的 tensorflow 后端。在我看来,Keras 可以说拥有最好的 API 和语法。与 tf.learn、slim 等相比,它简单易学。尽管它在后台运行 tensorflow,但与使用纯 tensorflow 运行图形相比,它非常慢。因此,我有时用来从模型中挤出性能的一个小技巧是使用 keras 定义模型架构,然后使用 keras.backend.get_session().graph 从 keras 获取纯张量流图,并使用 slim 或 tf.learn 进行训练 /推断你的模型。因此,您正在使用两个世界中最好的。从语法上讲,这开辟了许多训练/推断模型的方法。

    【讨论】:

    • 好的,所以我应该使用 model.fit(X,[y1,y1]) ...这就是我一直在使用的。只是想看看有没有替代品。将等待看看是否有人有其他想法。如果没有,将接受你的回答。谢谢。
    • 嘿@Benjamin,据我所知,fit_generator、train_on_batch 都具有相同的语法。但我已经编辑了我的答案,包括一个小技巧,你可以用它来打开你的选项
    • @AbhijitBalaji 你能在上面解释的黑客中添加一两个链接吗?谢谢。
    • @Akash 这篇文章现在无关紧要,因为它与 TF 1.X 相关,现在有了 TF 2.X,Keras 已深度集成到 TF 系统中,速度非常快,动态图也相似到 PyTorch。所以这个 hack 已经过时了。
    猜你喜欢
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 2023-02-09
    相关资源
    最近更新 更多