【问题标题】:Polynomial Regression using keras使用 keras 的多项式回归
【发布时间】:2020-09-03 08:13:22
【问题描述】:

嗨,我是 keras 的新手,我只是想知道 ann 对多项式回归任务有什么好处,或者我们应该只是 以 sklearn 为例,我编写了这个脚本

import numpy as np
import keras
from keras.layers import Dense
from keras.models import Sequential


x=np.arange(1, 100)
y=x**2

model = Sequential()
model.add(Dense(units=200, activation = 'relu',input_dim=1))
model.add(Dense(units=200, activation= 'relu'))
model.add(Dense(units=1))

model.compile(loss='mean_squared_error',optimizer=keras.optimizers.SGD(learning_rate=0.001))

model.fit(x, y,epochs=2000)

但是在对一些数字进行测试后,我没有得到像这样的好结果:

model.predict([300])
array([[3360.9023]], dtype=float32)

我的代码中是否有任何问题,或者我不应该将 ann 用于多项式回归。 谢谢。

【问题讨论】:

    标签: python-3.x keras regression


    【解决方案1】:

    我不是100%肯定,但我认为你得到这么糟糕的预测的原因是因为你没有扩展你的数据。人工神经网络非常重要,因此,缩放是必须的。缩放数据如下所示:

    import numpy as np
    import keras
    from keras.layers import Dense
    from keras.models import Sequential
    
    
    x=np.arange(1, 100)
    y=x**2
    
    from sklearn.preprocessing import StandardScaler
    sc_x = StandardScaler()
    x = sc_x.fit_transform(x)
    sc_y = StandardScaler()
    y = sc_y.fit_transform(y)
    
    model = Sequential()
    model.add(Dense(units=5, activation = 'relu',input_dim=1))
    model.add(Dense(units=5, activation= 'relu'))
    model.add(Dense(units=1))
    
    model.compile(loss='mean_squared_error',optimizer=keras.optimizers.SGD(learning_rate=0.001))
    
    model.fit(x, y,epochs=75, batch_size=10)
    
    prediction = sc_y.inverse_transform(model.predict(sc_x.transform([300])))
    print(prediction)
    

    请注意,我将2000年的时代数更改为75.这是因为2000时代对于神经网络来说是高位,它需要大量的时间训练。你的 X 数据集只包含 100 个值,所以我建议的最大时期数是 75。

    此外,我还将每个隐藏层中的神经元数量从 200 个更改为 5 个。这是因为 200 个神经元对于大多数数据集来说远远不够,更不用说长度为 100 的小数据集了。

    这些变化应确保您的神经网络产生更准确的预测。

    希望有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      • 2017-10-14
      • 2012-07-20
      • 2021-06-03
      • 2015-10-03
      • 2021-10-18
      • 2019-01-13
      相关资源
      最近更新 更多