【问题标题】:keras always predict in a straight linekeras 总是直线预测
【发布时间】:2019-12-18 07:40:57
【问题描述】:

我从深度学习开始。我正在尝试使用多层模型学习二次函数。 predicted_y 似乎总是一行(learnX 的构建),我在这里做错了什么?

我希望代码清楚。这是我的 Jupiterlab 单元代码:

import pandas as pd
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Activation
from sklearn.preprocessing import MinMaxScaler

def my_build_model(X, y):
    model = Sequential([
        Dense(16, input_shape=(X.shape[1],)),
        Activation('relu'),
        Dense(8),
        Activation('relu'),
        Dense(4),
        Activation('relu'),
        Dense(1),
    ])

    model.compile(loss="mean_squared_error", optimizer='adam', metrics=['mse'])

    model.fit(X, y, epochs=100)

    _, accuracy = model.evaluate(X, y)
    print('Accuracy: %.2f' % (accuracy*100))

    return model

n_rows = 20
X=pd.DataFrame({
    'a': [1 + x for x in range(-n_rows, 5+n_rows)],
    'b': [2 + x for x in range(-n_rows, 5+n_rows)],
    'c': [3 + x for x in range(-n_rows, 5+n_rows)],
    'd': [4 + x for x in range(-n_rows, 5+n_rows)],
    'e': [5 + x for x in range(-n_rows, 5+n_rows)],
    'f': [6 + x for x in range(-n_rows, 5+n_rows)],
})
y=pd.Series([10 + random.random() + x * x for x in range(-n_rows, 5+n_rows)])

csX = MinMaxScaler()
XContinuous = csX.fit_transform(X)

model = my_build_model(X=XContinuous, y=y)

df = pd.DataFrame({'y': y, 'predict_y': [x for [x] in model.predict(XContinuous)]})

df['y'].plot(c='#ff0000aa', label='y', legend=True)
plt.show()

df['predict_y'].plot(c='#00bb00aa', label='predict_y', legend=True)
plt.show()

【问题讨论】:

    标签: python pandas keras


    【解决方案1】:

    这可以归因于几件事。

    • 首先,我认为您应该重新考虑特征的“随机性”。如果我查看XContinuous,每一行的所有特征都是相同的。

    • 您可能低估了逼近您的函数所需的神经元数量。更多信息here

    然而,我通过一些调整获得了一个不错的结果:

    • 随机X
    • optimizer=Adam(lr=0.0001)
    • epochs=1000
    • 10000x100x10000x100x1 密集 relu 的架构
    Epoch 1000/1000
    45/45 [==============================] - 0s 2ms/step - loss: 4.1500 - mean_squared_error: 4.1500
    

    我确信有很多更好的方法可以做到这一点;当前的设置感觉像是一个巨大的矫枉过正。

    您尝试使用神经网络进行此操作是否有原因?你考虑过sklearn's linear regressors吗?

    【讨论】:

      猜你喜欢
      • 2019-09-07
      • 1970-01-01
      • 2020-10-28
      • 2018-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-22
      • 2018-01-04
      相关资源
      最近更新 更多