私は簡単なフィードフォワードニューラルネットワークを実行しようとしています。私の訓練とテストの精度は、エポック全体で同じようです。紛失と正確さは、私の訓練を通して同じです。
from keras.models import Sequential
from keras.layers import Dense
from keras.utils import plot_model
from IPython import embed
from keras import optimizers
from keras import backend as K
import keras
import numpy as np
import glob
import pre_process_data as dataProc
def network():
path = '/home/RD*'
files = glob.glob(path)
model = Sequential()
model.add(Dense(2048, input_shape=(10030,),name="dense_one"))
model.add(Dense(2048,activation='softmax',name = "dense_two"))
model.add(Dense(4,activation='tanh',name = "dense_three"))
#model.add(Dense(4,activation = 'relu',name = "dense_four"))
for l in model.layers:
print l.name, l.input_shape , "=======>", l.output_shape
print model.summary()
model.compile(loss = 'categorical_crossentropy',
optimizer = "adam",
metrics = ['accuracy'])
#Reads data from text files
pre_proc_data = dataProc.OnlyBestuData()
data = pre_proc_data[:,0:-1]
labels = pre_proc_data[:, -1]
labels = np.random.randint(0,4,32) #Generate random lables
one_hot_labels = keras.utils.to_categorical(labels, num_classes=4)
model.fit(x = data,y = one_hot_labels ,epochs = 10, batch_size = 2, verbose = 2)
#embed()
def main():
with K.get_session():
network()
main()
出力が下に貼り付けられます。私はニューラルネットワークの仕組みを学びたいと思うので、非常に簡単なフィードフォワードネットワークを作成しました。オプティマイザを "adam"から "SGD"に0.01の学習率で変更しようとしました。しかし、私のネットワークは私に一定の損失と正確さを与えてくれます。これは小さなネットワークなので、入力全体のサイズは32x10030で、各行はジョイント位置のセットです。
ここで間違っている可能性があることを教えてください。
出力:
Epoch 1/10
5s - loss: 9.6919 - acc: 0.4375
Epoch 2/10
5s - loss: 9.5701 - acc: 0.4688
Epoch 3/10
5s - loss: 9.5701 - acc: 0.4688
Epoch 4/10
5s - loss: 9.5701 - acc: 0.4688
Epoch 5/10
5s - loss: 9.5701 - acc: 0.4688
Epoch 6/10
5s - loss: 9.5701 - acc: 0.4688
Epoch 7/10
5s - loss: 9.5701 - acc: 0.4688
Epoch 8/10
5s - loss: 9.5701 - acc: 0.4688
Epoch 9/10
5s - loss: 9.5701 - acc: 0.4688
Epoch 10/10
5s - loss: 9.5701 - acc: 0.4688
なぜあなたはランダムにラベルを生成しますか?それが単なるテスト用のものであれば、ベースラインを得るために共通のデータセットに固執してはいけませんか? – petezurich
ええ、それは意味があります。私はこれを共通のベースラインで試してみる。ちょうど私のコードのスケルトンが正しいことを確認したい。 – deeplearning
私が気づくもう一つの事柄:あなたの最後の層はsoftmax活性化で設定する必要があります。 ReLuはそれが«決定»層なので意味がありません。 – petezurich