【问题标题】:How can I write a tensorflow model that fits multiple linear equations?如何编写适合多个线性方程的张量流模型?
【发布时间】:2020-10-11 18:46:42
【问题描述】:

我想编写一个基于输入拟合多个线性方程的模型。我想我需要一个估计分离(或拐点)点的层,对应于每个方程的参数集,以及一个根据分离点选择输出的层。但是,由于我是machine learning 的新手,我什至不知道相关的关键字。

import tensorflow as tf

def build_and_compile_model():
    model = tf.keras.Sequential([
        tf.keras.layers.InputLayer(input_shape=1),
        tf.keras.layers.Dense(3),
        # Need a kind of selection layer here.
        tf.keras.layers.Dense(1),
    ])
    model.compile(
        loss='mean_absolute_error',
        optimizer=tf.keras.optimizers.Adam(1)
    )
    return model

x = tf.constant([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
y = tf.constant([10, 20, 30, 40, 30, 10, -10, -30, 0, 0, 0, 0])

model = build_and_compile_model()
model.fit(
    x,
    y,
    validation_split=0.2,
    verbose=1,
    epochs=100,
)

【问题讨论】:

  • 是否有理由使用机器学习来解决看似普通的最小二乘问题?
  • @paisanco 这是一个简化的练习题。我有一个大型数据集,可以分为多个子空间,并适合每个子空间内的多变量线性回归模型。

标签: tensorflow keras linear-regression tensorflow2.0 tf.keras


【解决方案1】:

如果您知道要从数据中拟合多少行,例如3 从图片中,那么你可以让你的模型输出 6 个参数。这 6 个参数将是 m1、b1、m2、b2、m3、b3,即每条线的斜率和 y 轴截距(y = m1*x + b1 等)。最后一层不是 tf.keras.layers.Dense(1),而是 tf.keras.layers.Dense(6)。我想,网络的输入是 (x,y) 对。最后,您可以处理隐藏层的数量(不是输入和输出层的层 - 在您的情况下,您有一个:tf.keras.layers.Dense(3))和每个节点的数量隐藏层,但您可能不需要超过一两个隐藏层。

然后,您需要编写一个损失函数,以便您的神经网络学习输出与 3 行参数匹配的 6 个参数。它可能类似于 loss = min(dist((x,y), line 1),dist((x,y), line 2),dist((x,y), line 3))。 dist 函数,即点到线的欧几里得最短距离,可以从一些简单的线性代数推导出来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    相关资源
    最近更新 更多