【问题标题】:How to train a Regression model for single input and multiple output?如何为单输入和多输出训练回归模型?
【发布时间】:2020-01-22 01:29:46
【问题描述】:

我已经训练了一个近似方程权重的回归模型: Y = R+B+G 为此,我提供了 R、B、G 和 Y 的预定值,作为训练数据,在训练模型后,模型能够成功地预测给定 R、B 和 G 值的 Y 值。我使用了具有 3 个输入的神经网络,1 个具有 2 个神经元的密集层(隐藏层)和具有单个神经元的输出层(输出)。

    hidden = tf.keras.layers.Dense(units=2, input_shape=[3])
    output = tf.keras.layers.Dense(units=1)

但是,我需要实现与此相反的操作。即,我需要训练一个模型,该模型接受 Y 的值并预测与 Y 的值相对应的 R、B 和 G 的值。 我刚刚了解到回归是关于单一输出的。因此,我无法想到解决方案和解决方法。 请帮助。
(PS 是否可以使用我已经训练过的模型来做到这一点?我的意思是,一旦确定了 R、B 和 G 的权重,是否可以操纵模型使用这些权重来映射 Y对 R、B 和 G?)

【问题讨论】:

  • 您希望使用图像的 RGB 值对图像进行着色吗?如果是,还有另一种方法。
  • 不,我不是故意的。我正在尝试近似函数。

标签: python tensorflow machine-learning linear-regression


【解决方案1】:

这是一个开始使用 tensorflow 中的神经网络解决问题的示例。

import numpy as np
from tensorflow.python.keras.layers import Input, Dense
from tensorflow.python.keras.models import Model

X=np.random.random(size=(100,1))
y=np.random.randint(0,100,size=(100,3)).astype(float)   #Regression

input1 = Input(shape=(1,))
l1 = Dense(10, activation='relu')(input1)
l2 = Dense(50, activation='relu')(l1)
l3 = Dense(50, activation='relu')(l2)
out = Dense(3)(l3)

model = Model(inputs=input1, outputs=[out])
model.compile(
    optimizer='adam',
    loss=['mean_squared_error']
    )

history = model.fit(X, [y], epochs=10, batch_size=64)

【讨论】:

  • 效果很好!向你致敬!但怎么可能呢?我的意思是给出多个输出的回归......请解释一下,我很好奇。
  • 模型内部学习映射函数。与任何其他决策问题一样,网络中的神经元子集对输出层的特定决策节点的贡献更大,而另一组神经元可能对其他节点的影响更大。
  • 我有2个疑惑:1)为什么X和[y]的格式不一样?为什么不是 X 和 y? 2)我最近一直在关注 tensorflow 教程,他们试图暗示回归仅适用于单输出场景。他们错了吗?
  • 关于 (2),如果他们没有明确声明(事实上他们没有),他们并没有错;请记住,教程通常处理简单的介绍性设置,而多输出回归不是这样的设置
  • 1.实例化模型时,输出列表通常用于多输出模型。但是,也可以在列表中使用单个输出,就像我在实例化 Model 时所做的 outputs=[out] 一样,因此,真正的标签以类似的方式传递,即 [y],尽管 y 会起作用。 2. 这里,假设是多个决策/输出变量依赖于相同的输入集。隐藏单元,另一个(更高/更低)维特征空间中的抽象表示,有助于通过模型从训练样本中学习到的具有可变权重的决策。
猜你喜欢
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
  • 2021-04-19
  • 2019-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多