2017-07-30 8 views
1

私はkeras(backened tensorflow)でニューラルネットワークを作成しようとします。 私は4つの入力変数と2つの出力変数を持っています: 利用できません予測のためのkerasを持つMLP

私はTestsetへの予測をしたいです。

これは私のコードです:私は、スクリプトを実行すると

from keras import optimizers 
from keras.models import Sequential 
from keras.layers import Dense 
import numpy 
numpy.random.seed(7) 
dataset = numpy.loadtxt("trainingsdata.csv", delimiter=";") 
X = dataset[:,0:4] 
Y = dataset[:,4:6] 
model = Sequential() 
model.add(Dense(4, input_dim=4, init='uniform', activation='sigmoid')) 
model.add(Dense(3, init='uniform', activation='sigmoid')) 
model.add(Dense(2, init='uniform', activation='linear')) 
sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) 
model.compile(loss='mean_squared_error', optimizer='sgd', metrics=['accuracy']) 
model.fit(X, Y, epochs=150, batch_size=10, verbose=2) 
testset = numpy.loadtxt("testdata.csv", delimiter=";") 
Z = testset[:,0:4] 
predictions = model.predict(Z) 
print(predictions) 

、精度がすべてのエポック後に1.000であり、私は、結果として、すべての入力ペアのため、常に同じ出力を得る:

[-5.83297 68.2967] 
[-5.83297 68.2967] 
[-5.83297 68.2967] 
... 

を私のコードの不具合は何ですか?

+0

わかりませんが、私はY変数の形を変えようとする可能性があります。 https://keras.io/models/model/から、 'outputs = [b1、b3、b3]'と言ったので、出力はデータのセットではなく、値のセットでなければなりません。それを転置することでそれを行うことができます。 – malioboro

+0

SGDオプティマイザを定義しましたが、実際には使用していないことに注意してください。コンパイル時にAdaptative Momentum(Adam)を使用します。 – Nathan

+1

ありがとうございました!私は私のポストでそれを変更しました。私の元のスクリプトでは正しいです。どのオプティマイザを好むでしょうか? –

答えて

2

データをモデルに入力する前に正規化/標準化を行い、モデルが学習を開始するかどうかを確認することをお勧めします。

scikit-learnのStandardScalerをご覧ください。

into this SO threadをご覧になり、正しくトレーニングデータをfit_transformに入力し、テストデータはtransformにしてください。

のscikit学習データの前処理パイプラインを使用するこのチュートリアルでもあります:入力変数の規模が互いにあまりに異なる場合http://machinelearningmastery.com/regression-tutorial-keras-deep-learning-library-python/

+1

リンクありがとうございました。私はBrownlee博士のチュートリアルを多く読んだことがありますが、これを見つけられませんでした! –

0

ニューラルネットワークは、大変な時間を持っています。 10,1000,100000を同じ入力として使用すると、大きな値が何であっても勾配が崩壊します。他の値は効果的に情報を提供しません。

1つの方法は、入力変数を単純に定数で再スケーリングすることです。単純に206000を100000で割ることができます。すべての変数が同じ桁数になるようにしてください。ネットワークでは、大きな数字は小さな数字より少し難しいです。

+1

ありがとう、それは私が今使用できる情報を提供する!私の神経網の結果は正確ではありませんが、常に以前と同じではありません。 –

+0

お気軽にお手伝いください! – Fosa

関連する問題