2017-07-09 21 views
2

4次多項式からデータを生成し、この多項式に適合するようにKerasで回帰モデルを作成したいと考えました。問題は、フィッティング後の予測が基本的に線形であると思われることです。これがニューラルネットで初めて作業したので、私は非常に些細で愚かな過ちを犯したと思います。多項式に適合する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_trainthis fileから最初の9900個のエントリを含むnumpyの配列です:

は、ここに私のコードです。

異なるbatch_sizes、エポック数、レイヤーサイズ、およびトレーニングデータの量を試しました。何も助けてくれないようです。

意味が分からないものをすべて指摘してください。

+0

x_train、y_train、x_testを提供できますか?読者がコードを実行できるようにします。 –

+0

元の質問にデータファイルへのリンクを追加しました。 – FloodLuszt

答えて

1

ニューラルネットワークは、一般に、多項式関数を外挿する上でうまく機能しません。ただし、トレーニングデータとテストデータが同じ範囲にある場合は、かなり良い結果が得られます。私はいくつかのデータを生成し、あなたのコードを使用:私はより多くの反復と、より正確な結果を得るために40にepochsを増加

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() 

注意。また、冗長性= 1を設定して、損失がどのように動作するかを確認することもできます。損失は​​実際には7.4564e-04まで減少しており、私が得た結果は以下の通りです。赤い線はネットワークの予測値で、青い線は正しい値です。彼らはお互いに非常に近いことがわかります。

enter image description here

+0

ありがとうございます!私が上記のコードを選んだ多項式については実際には機能しません。しかしReLUからSigmoid(10 * x)への活性化形態を変えることは、受け入れられる結果をもたらす。ニューラルネットの最初のショットのための多項式をフィッティングすることから始めるのは貧しい選択でした。 – FloodLuszt

関連する問題