如何编写适合多个线性方程的张量流模型?

时间:2020-10-11 18:46:42

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

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

Multiple linear equations based on input

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,
)

1 个答案:

答案 0 :(得分:0)

如果您知道要从数据中容纳几行,例如从图片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函数,即从点到线的欧几里德最短距离,可以从一些简单的线性代数中得出。