2016-11-03 12 views
1

私はkerasを使ってロジスティック回帰を使用しようとしています。これはMLでの私の最初の実験の1つです。のは、私が唯一の1引数でいくつかの非常に単純な連続関数の値を予測したいとしましょう、y = x*10単純な線形関数を予測するための列車モデル

のように私はこのようなモデルを訓練しようとした:

from matplotlib import pyplot as plt 
import numpy as np 
from keras.models import Sequential 
from keras.layers import Dense, Activation 

# fix random seed for reproducibility 
np.random.seed(7) 

# function 
curve = np.vectorize(lambda x: x*10) 

# data 
Xideal = np.arange(1, 15.5, 0.005) 
Yideal = curve(Xideal) 
X = Xideal[1::5] 
Y = curve(X) 

# Model 
model = Sequential() 
model.add(Dense(20, activation='sigmoid', input_dim=1)) 
model.add(Dense(5, activation='linear')) 
model.add(Dense(1)) 

model.compile(loss='mse', optimizer='rmsprop', metrics=['accuracy']) 

# Fit 

model.fit(X, Y, nb_epoch=1000, batch_size=32, verbose=0) 

# Evaluate 

# evaluate the model 
scores = model.evaluate(Xideal, Yideal) 
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100)) 
print("\n%s: %.2f%%" % (model.metrics_names[0], scores[0]*100)) 

くれ 2624/2900 [==========================>...] - ETA: 0s acc: 2.38% loss: 44.35%

の結果を与えていませんなぜそれがちょうど2.38%の正確さであるか確かめてください。私は異なる活性化関数、バッチサイズとエポックを持つ異なるモデルを試していましたが、最大10%の正確さで得ました。私はここで何か基本的なことを忘れていると思う。

+0

1)ロジスティック回帰は、実際には回帰分析ではなく、分類である。しかし、あなたはあなたの仕事の回帰を望んでいるようです。 2)実際にデータを前処理する必要があります(標準化/正規化、NNのより重要なルールの1つ) – sascha

答えて

2

この線形データでは、単一の密層で十分である。 rmspropの代わりに、私はちょうどグラデーションの降下を使用します。 http://nbviewer.jupyter.org/gist/lhk/6650e4fb85f625199ee5be6d52cbbd0d

は注意してください::

私はあなたのためにipythonノートブックを作成したプロットでは、私は手動で互いに離れた2行を移動しなければなりませんでした。それで-2があるのです。

+0

ありがとうございました!なぜ10のバッチサイズを選んだのですか? – ruX

+1

損失の勾配は、バッチ全体について計算され、ネットワーク内の重みの更新は、バッチ内の個々のサンプルの平均値になります。これは、巨大なバッチ - >グラデーションの強い平滑化効果を意味します。いくつかの問題については、訓練をより安定させるために巨大なバッチを持つことを助けることができます。小さなバッチには、各エポックにバッチが多く存在するという利点があります。エポックあたりの更新ステップが増えます。この問題に対しては、全体最適が存在する。解決策は十分に調整されていなければならない。そこで、バッチサイズを減らして更新を迅速化しました。 – lhk

関連する問題