当前位置: 首页 > 知识库问答 >
问题:

TensorFlow2训练的简单线性回归模型的池性能

闻梓
2023-03-14

我的模型像y = 2 * x 200错误一样简单,但我无法以简单的方式获得正确的结果。我不知道发生了什么。

import numpy as np
from tensorflow import keras
x = np.arange(100)
error = np.random.rand(100,1).ravel()
y = 2*x + 200 + error

opt = keras.optimizers.Adam(lr=0.0005)
model = keras.Sequential([keras.layers.Dense(1, input_shape=[1])])
model.compile(optimizer=opt, loss='mse', metrics=['mae'])
early_stopping_callback = keras.callbacks.EarlyStopping(
        patience=10,
        monitor='val_loss',
        mode='min',
        restore_best_weights=True)
history = model.fit(x, y, epochs=2000, batch_size=16, verbose=1,
                    validation_split=0.2, callbacks=[early_stopping_callback])

当验证损失很大时,我的模型总是停止:

纪元901/2000 5/5[============>===>-0s 3ms/步-损失:14767.1357-val_loss:166.8979

在训练参数后,我不断变得不合适:

model.weights

[

请帮我找出我的代码有什么问题。

我使用tensorflow-v2.3.0

共有1个答案

童冠玉
2023-03-14

我明白了,主要问题是提前停止过早地停止了我的培训过程!另一个问题是学习率太小。

所以当我更改两个参数设置时,我得到了正确的结果:

import numpy as np
from tensorflow import keras
x = np.arange(100)
error = np.random.rand(100,1).ravel()
y = 2*x + 200 + error

opt = keras.optimizers.Adam(lr=0.8)  # <--- bigger lr
model = keras.Sequential([keras.layers.Dense(1, input_shape=[1])])
model.compile(optimizer=opt, loss='mse', metrics=['mae'])
early_stopping_callback = keras.callbacks.EarlyStopping(
        patience=100,  # <--- longer patience to training
        monitor='val_loss',
        mode='min',
        restore_best_weights=True)
history = model.fit(x, y, epochs=2000, batch_size=16, verbose=1,
                    validation_split=0.2, callbacks=[early_stopping_callback])
 类似资料:
  •   回归问题的条件或者说前提是 1) 收集的数据 2) 假设的模型,即一个函数,这个函数里含有未知的参数,通过学习,可以估计出参数。然后利用这个模型去预测/分类新的数据。 1 线性回归的概念   线性回归假设特征和结果都满足线性。即不大于一次方。收集的数据中,每一个分量,就可以看做一个特征数据。每个特征至少对应一个未知的参数。这样就形成了一个线性模型函数,向量表示形式:   这个就是一个组合问题,

  • 线性回归模型(linear regression) 1.模型定义 给定数据集,$$T={(x{(1)},y{(1)}),(x{(2)},y{(2)}),...,(x{(m)},y{(m)})}$$,其中$$x{(i)}=(1, x_1, x_2, ..., x_n)T\in X= R{n+1}$$,$$y{(i)}\in Y=R$$,线性回归模型试图学到一个通过属性的线性组合来进行预测的函数,即

  • 1 普通线性模型   普通线性模型(ordinary linear model)可以用下式表示: Y = \beta0 + \beta_1 x_1 + \beta_2 x_2 + … + \beta{p-1} x_{p-1} + \epsilon   这里$\beta$是未知参数,$\epsilon$是误差项。普通线性模型主要有以下几点假设: 响应变量$Y$和误差项$\epsilon$均服从正太分

  • 1 二元逻辑回归   回归是一种很容易理解的模型,就相当于y=f(x),表明自变量x与因变量y的关系。最常见问题如医生治病时的望、闻、问、切,之后判定病人是否生病或生了什么病, 其中的望、闻、问、切就是获取的自变量x,即特征数据,判断是否生病就相当于获取因变量y,即预测分类。最简单的回归是线性回归,但是线性回归的鲁棒性很差。   逻辑回归是一种减小预测范围,将预测值限定为[0,1]间的一种回归模型

  •   许多标准的机器学习算法可以归结为凸优化问题。例如,找到凸函数f的一个极小值的任务,这个凸函数依赖于可变向量w(在spark源码中,一般表示为weights)。 形式上,我们可以将其当作一个凸优化问题${min}_{w}f(w)$。它的目标函数可以表示为如下公式 (1):   在上式中,向量x表示训练数据集,y表示它相应的标签,也是我们想预测的值。如果L(w;x,y)可以表示为${w}^{T}x

  • 随着深度学习框架的发展,开发深度学习应用变得越来越便利。实践中,我们通常可以用比上一节更简洁的代码来实现同样的模型。在本节中,我们将介绍如何使用MXNet提供的Gluon接口更方便地实现线性回归的训练。 生成数据集 我们生成与上一节中相同的数据集。其中features是训练数据特征,labels是标签。 from mxnet import autograd, nd num_inputs =