So-net無料ブログ作成
検索選択

torch7で小さくディープラーニング(2) [人工知能(ディープラーニング)]

さて、前回はふたつの数値を入力すると、答えとしてふたつの数値が出力されるというものでした。
今度は、ふたつの数値を入力して、出力されるのはひとつの数値、というように変えてみます。
これもテキストファイルに保存して、thorchを起動、dofile '保存したファイル名'で実行させます。


------------------ここから
require 'nn'

dataset={}

function dataset:size() return 200 end

for i=1,dataset:size() do
input=torch.randn(2)
input[1]=torch.random(0,10)
input[2]=torch.random(0,10)
output=torch.Tensor(1):zero()
if (input[1] > input[2]) then
output[1]=-1
end
if (input[1] < input[2]) then
output[1]=1
end
-- データセットは入力2、出力1
dataset[i]={input,output}

end


-- 人工知能モデルも入力2、出力1、データセットと合わせます。
model=nn.Sequential();
model:add(nn.Linear(2,5))
model:add(nn.Tanh())
model:add(nn.Linear(5,1))
model:add(nn.Tanh())

criterion = nn.MSECriterion()
trainer=nn.StochasticGradient(model,criterion)
trainer.learningRate=0.01
trainer.maxIteration=200
trainer:train(dataset)
-- 学習済みデータの単独利用のために保存しておく
torch.save('TEST.t7',model)

x=torch.Tensor(2)
for i=1,10 do
x[1]=torch.random(1,10)
x[2]=torch.random(1,10)
a=model:forward(x)
print("INPUT :",x[1],",",x[2])
print("ANSWER:",a[1])
print("------")
end

------------------ここまで

プログラム中に
trainer.maxIteration=200
とありますが、これを
trainer.maxIteration=10000
とかに設定すれば学習を200回から10000回にすることができます。

さて結果ですが…
右側の数値が大きいときには答えはほぼ「1」、
左側の数値が大きいときには答えはほぼ「-1」、
両方が同じときには、「0」に近い答えが返ってきます。
これはこれで面白いですよね!
TEST3kekka.png
ちなみに、今回の人工知能モデルのニューラルネットワークは、なぜ2層でノードが5個なのかというと…最初は適当に20個ぐらいのノードで、3層くらいでやってみたのですが、扱う数値も大きくないし、複雑な処理でもないので減らしていったら、これぐらいでも大丈夫だったため…というのが真相です。
「なんだよ、もっと数学的に計算してノードや層の数を割り出すんじゃないのかよ」と思った人もいるでしょう。
 たしかに理由が「いきあたりばったり」だと言われるとモヤモヤしてなんかきもちわるいですよね。
 実は私なりに、いろいろと詳しい人とか、実際に研究している人にそれを尋ねたのですが…
 ノードや層の数の決定は「正直、やってみないと判らない」そうです。
 扱うデータの数や、その数値の大きさ、使われている関数など様々な影響を受けるので、一概にこれだとは言えないそうです。

 それでも自分なりにテストして判った事は、ノードや層の数が少な過ぎると学習はまったく進みませんし、やたら増やしても時間がかかるだけで効率が悪いので、よく使うデータセットの規模に合わせて、自分なりの目安を探しておくのが良いようです。

あと、このプログラムの中に、
torch.save('TEST.t7',model)
と、学習済みデータの保存をしている部分があるんですが…これは学習済みデータを使ったプログラムの利用を想定しています。
次回はいよいよ、学習済みデータを使ったプログラムの作成です。



ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装



nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この記事のトラックバックURL:
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。