我从深度学习开始。我正在尝试学习具有多层模型的二次函数。 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()
答案 0 :(得分:0)
这可以归结为几件事。
首先,我认为您应该重新考虑功能的“随机性”。如果我查看XContinuous
,则每一行的所有功能都是相同的。
您可能低估了近似功能所需的神经元数量。更多信息here。
但是,通过一些调整,我还是能够取得不错的成绩:
X
optimizer=Adam(lr=0.0001)
epochs=1000
Epoch 1000/1000
45/45 [==============================] - 0s 2ms/step - loss: 4.1500 - mean_squared_error: 4.1500
我确信有很多更好的方法可以做到这一点;当前的设置感觉像是一个过大的杀伤力。
您是否有理由尝试使用神经网络执行此操作?您是否考虑过sklearn
's linear regressors?