2017-01-11 76 views
2

我是keras的新手,我嘗試構建自己的神經網絡。如何在keras上構建簡單的神經網絡(不是圖像識別)

任務:

我需要寫一個系統,可以使人物,這可能滿足一個或多個敵人的決定。該系統可以知道:

  • 百分比衛生字符
  • 手槍的存在;
  • 敵人的數量。

答案必須是下列之一形式:

  1. 攻擊
  2. 運行
  3. 隱藏(用於偷襲)
  4. 什麼也不做

爲了培養起來,我做了一個「課程」的表格:

https://i.stack.imgur.com/lD0WX.png

因此,這裏是我的代碼:

# Create first network with Keras 
from keras.models import Sequential 
from keras.layers import Dense 
from keras.optimizers import SGD 
import numpy 
# fix random seed for reproducibility 
seed = 7 
numpy.random.seed(seed) 
# split into input (X) and output (Y) variables 
X = numpy.array([[0.5,1,1], [0.9,1,2], [0.8,0,1], [0.3,1,1], [0.6,1,2], [0.4,0,1], [0.9,1,7], [0.5,1,4], [0.1,0,1], [0.6,1,0], [1,0,0]]) 
Y = numpy.array([[1],[1],[1],[2],[2],[2],[3],[3],[3],[4],[4]]) 
# create model 
model = Sequential() 
model.add(Dense(3, input_dim=3, init='uniform', activation='relu')) 
model.add(Dense(1, init='uniform', activation='sigmoid')) 
# Compile model 
sgd = SGD(lr=0.001) 
model.compile(loss='binary_crossentropy', optimizer=sgd, metrics=['accuracy']) 

# Fit the model 
model.fit(X, Y, nb_epoch=150) 
# calculate predictions 
predictions = model.predict(X) 
# round predictions 
rounded = [round(x) for x in predictions] 
print(rounded) 

在這裏,我的預測得到。 [1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]

每個時期的準確度是0.2727,損失是減少的。 這是不對的。

我試圖把學習速度除以10,改變激活和優化。即使我手動輸入數據。 任何人都可以告訴我如何解決我的簡單問題。謝謝。

回答

2

你的代碼有幾個問題。

  1. 與NN模型相比,數據條目的數量非常少。
  2. Y表示爲類編號而不是類矢量。迴歸模型可以從中學習,但它是一個糟糕的設計選擇。
  3. softmax函數的輸出總是在0-1之間..因爲這是用來模型只知道在0-1之間的值。

這裏下面是一個好一點修改後的代碼:

from keras.models import Sequential 
from keras.layers import Dense 
from keras.optimizers import SGD 
import numpy 
# fix random seed for reproducibility 
seed = 7 
numpy.random.seed(seed) 
# split into input (X) and output (Y) variables 
X = numpy.array([[0.5,1,1], [0.9,1,2], [0.8,0,1], [0.3,1,1], [0.6,1,2], [0.4,0,1], [0.9,1,7], [0.5,1,4], [0.1,0,1], [0.6,1,0], [1,0,0]]) 
y = numpy.array([[1],[1],[1],[2],[2],[2],[3],[3],[3],[0],[0]]) 

from keras.utils import np_utils 
Y = np_utils.to_categorical(y, 4) 
# print Y 

# create model 
model = Sequential() 
model.add(Dense(3, input_dim=3, activation='relu')) 
model.add(Dense(4, activation='softmax')) 
# Compile model 
# sgd = SGD(lr=0.1) 
# model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy']) 
model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy']) 

# Fit the model 
model.fit(X, Y, nb_epoch=700) 

# calculate predictions 
predictions = model.predict(X) 

predictions_class = predictions.argmax(axis=-1) 
print(predictions_class) 

注我已經使用了softmax活化的類是相互排斥的