2017-08-24 6 views
1

私は簡単なフィードフォワードニューラルネットワークを実行しようとしています。私の訓練とテストの精度は、エポック全体で同じようです。紛失と正確さは、私の訓練を通して同じです。

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 
+0

なぜあなたはランダムにラベルを生成しますか?それが単なるテスト用のものであれば、ベースラインを得るために共通のデータセットに固執してはいけませんか? – petezurich

+0

ええ、それは意味があります。私はこれを共通のベースラインで試してみる。ちょうど私のコードのスケルトンが正しいことを確認したい。 – deeplearning

+0

私が気づくもう一つの事柄:あなたの最後の層はsoftmax活性化で設定する必要があります。 ReLuはそれが«決定»層なので意味がありません。 – petezurich

答えて

0

私が正しくあなたのセットアップを理解していれば、あなたが10030個の機能(別名、関節位置)それぞれに32個のサンプルを持っています。それは多くの機能と方法があまりにも少ないサンプルです。

さらに多くのサンプルを使用すると同時に、PCAを使用して機能を減らしてください。

なぜ、すべてのレイヤーで違った、珍しいアクティベーションを使用しますか?すべてのレイヤーをReLU(そして最後のレイヤーをsoftmax)に設定し、そこから開始してください。

+0

はい。私はそれがあまりにも多くのサンプルであることをかなり確信していた。それが私の最初のニューラルネットワークであるため、私はレイヤーのアクティベーションが台無しにされているにもかかわらず、私が重要な部分を見落としていないことを確認したかったのです。 – deeplearning

+1

実際にはあまりにも** **サンプル数が少なく、方法が多すぎます。 – desertnaut

+0

うん!私は見る...ディメンション削減はここで助けてくれるだろうか? – deeplearning

関連する問題