簡體   English   中英

Keras模型擬合多項式

[英]Keras model to fit polynomial

我從4次多項式生成了一些數據,並希望在Keras中創建回歸模型以適合該多項式。 問題在於,擬合后的預測似乎基本上是線性的。 因為這是我第一次使用神經網絡,所以我認為自己犯了一個非常瑣碎而愚蠢的錯誤。

這是我的代碼:

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

model.compile(loss='mean_squared_error',
              optimizer='sgd')

model.fit(x_train, y_train, epochs=20, batch_size=50)

loss_and_metrics = model.evaluate(x_test, y_test, batch_size=100)

classes = model.predict(x_test, batch_size=1)

x_trainy_train是numpy數組,包含此文件中的前9900個條目。

我嘗試了不同的batch_size,時代數,圖層大小和訓練數據量。 似乎沒有任何幫助。

請指出所有您認為沒有意義的內容!

神經網絡通常不能很好地推導多項式函數。 但是,如果您的訓練和測試數據來自同一范圍,則可以實現非常好的結果。 我生成了一些數據並使用了您的代碼:

import numpy as np
x_train=np.random.rand(9000)
y_train=x_train**4+x_train**3-x_train
x_train=x_train.reshape(len(x_train),1)

x_test=np.linspace(0,1,100)
y_test=x_test**4+x_test**3-x_test
x_test=x_test.reshape(len(x_test),1)


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

model.compile(loss='mean_squared_error',
              optimizer='sgd')

model.fit(x_train, y_train, epochs=40, batch_size=50, verbose=1)

loss_and_metrics = model.evaluate(x_test, y_test, batch_size=100)

classes = model.predict(x_test, batch_size=1)

test=x_test.reshape(-1)
plt.plot(test,classes,c='r')
plt.plot(test,y_test,c='b')
plt.show()

請注意,我將epochs增加到40,以獲得更多的迭代次數和更准確的結果。 我還設置了verbose=1來查看損失的表現。 損失確實減少到7.4564e-04 ,以下是我得到的結果。 紅線是網絡的預測,藍線是正確的值。 您會看到它們彼此之間非常接近。

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM