2016-06-15 10 views
2

私は自分のためにオンラインで見つかったコードを修正しました。ニューラルネットワークのトレーニングは完了です。しかし、私はデータセットのテストをどのように進めるべきかはわかりません。私のデータセットは350項目で構成され、そのうちの半分は訓練に使用し、残りの半分はテストに使用します。どのようにコードがテストモジュールのように見えるか誰でも助けてくれますか? ニューラルネットワークの構造: それは3つの隠れ層 それはありがとう 34個の列を持っているがありますがトレーニング終了後のニューラルネットワークのデータテストコード

これは私の作業コードは、訓練に使用されている:私はそれを理解できるように

import numpy as np 
import csv 

X = X = np.array([[float(cell) for cell in row[:-1]] for row in  csv.reader(open('C:/Users/Acer/Desktop/final sem/Project/Implementation/nn.csv'))]) 

Y = np.array([float(row[-1]) for row in csv.reader(open('C:/Users/Acer/Desktop/final sem/Project/Implementation/nn.csv'))]) 

syn0 = 2*np.random.random((34,26)) - 1 

syn1 = 2*np.random.random((26,18)) - 1 

syn2 = 2*np.random.random((18,11)) - 1 


syn3 = 2*np.random.random((11,6)) - 1 


for j in xrange(350): 

    l1 = 1/(1+np.exp(-(np.dot(X,syn0)))) 
    l2 = 1/(1+np.exp(-(l1.dot(syn1)))) 
    l3 = 1/(1+np.exp(-(l2.dot(syn2)))) 
    l4 = 1/(1+np.exp(-(l3.dot(syn3)))) 

    l4_delta = (Y[j] - l4)*(l4*(1-l4)) 
    l3_delta = l4_delta.dot(syn3.T) * (l3 * (1-l3)) 
    l2_delta = l3_delta.dot(syn2.T) * (l2 * (1-l2)) 
    l1_delta = l2_delta.dot(syn1.T) * (l1 * (1-l1)) 

    syn3 += np.dot(l3.transpose(),l4_delta) 
    syn2 += np.dot(l2.transpose(),l3_delta) 
    syn1 += np.dot(l1.transpose(),l2_delta) 
    syn0 += X.T.dot(l1_delta) 
+0

申し訳ありませんが、スマートな回答はありませんが、通常はテスト用データの1/3、学習用データの2/3です。 – DaMachk

+0

大丈夫です。ありがとうございます – KSS

答えて

0

は、あなたが使用したいですあなたのデータセットの項目の分類のためのニューラルネットワーク
トレーニング後、最後のレイヤーが6 ニューロンであるため、
という6つのクラスがのネットワークにグループ化できます。

  • データセット
  • までforループアップの同じ更新を使用し、すなわち、ネットワークの出力を計算するためにエントリを使用しての項目のいずれかを実行します:ここで

    は、私はにはどうなるかです線l4 = 1/(1+np.exp(-(l3.dot(syn3))))。 (訓練の後、あなたはシナプスの重みをもう一度更新しないでくださいsyn0,syn1, ...)。

  • l4に6つの値の出力があります。
  • 私はいつもの解釈はこのように書き思う:さんはl4第三値を言わせては、あなたのサンプルがカテゴリ3であり、最大のです。
  • ここで、前のサンプルと同様のサンプルのほとんどは、カテゴリ3のアイテムとして分類する必要があります。
  • この方法で、あなたのニューラルネットワークは、あなたのサンプル

私は、これは多少役に立つホープのパターンを認識することができるはずです。これは非常に一般化されていますが、あなたのデータが何であるか、どのように見えているのか、また何を探しているのか分からないので、あなたの例もそうです。

+0

お返事ありがとうございます。データベースは、皮膚科学データセットである。そして予測されるべき6つのタイプの皮膚疾患がある。私の質問はトレーニングコードの下で行われたテストですか?テスト部分に保存されて使用される重量ですか? – KSS

+0

さて、私はそれを持っていると思う..基本的に、トレーニングコードでループが完了した後のウエイトは、後でテストコードで使用されるいくつかの配列に保存されます。新しいテストコードには、ループが 'l4 = 1 /(1 + np.exp( - (l3.dot(syn3)))) 'まで実行され、ウェイトが最初にトレーニング中に得られた値。これは正しいですか ? – KSS

+0

さて、あなたの質問がより良くなりました。前にこれを含めないと申し訳ありません:トレーニングとテストを分割する必要があります。あなたのテストのために使用したいデータの一部のためのループのためのあなたの訓練を実行してください。 (例えば、より大きいデータセットの場合、トレーニングに時間がかかる場合は、 'syn'配列を保存し、テスト/分類のためにロードすることをお勧めします。したがって、常に同じトレーニングを繰り返す必要はありません。)残りのデータを分類するために2番目のループを実行します。 – Kantenkopp

関連する問題