SSブログ

torch7で小さくディープラーニング(4)複数データからある数値をピックアップ [人工知能(ディープラーニング)]

今回は、5つの数のうちから-1になっているものを見つけるようにします。

==================================ここから

require 'nn'

dataset={}

function dataset:size() return 200 end
-- データセットを200個作ります
for i=1,dataset:size() do
input=torch.Tensor(5)
input[1]=torch.random(1,10)
input[2]=torch.random(1,10)
input[3]=torch.random(1,10)
input[4]=torch.random(1,10)
input[5]=torch.random(1,10)
-- 乱数でどこかを-1にして、同じ位置の出力は1にします。他は0
x=torch.random(1,5)
input[x]=-1
output=torch.Tensor(5):zero()
output[x]=1

dataset[i]={input,output}
end
-- 人工知能モデルの設定
model=nn.Sequential();
model:add(nn.Linear(5,6))
model:add(nn.Tanh())
model:add(nn.Linear(6,5))
model:add(nn.Tanh())


-- 学習用パラメーターの設定
criterion = nn.MSECriterion()
trainer=nn.StochasticGradient(model,criterion)
trainer.learningRate=0.01
trainer.maxIteration=100
trainer:train(dataset)

-- 学習済みデータをセーブしておきます。(今回はなくてもかまいません)
torch.save('TEST.t7',model)

-- 学習結果の確認
a=torch.Tensor(5)
for i=1,10 do
a[1]=torch.random(1,10)
a[2]=torch.random(1,10)
a[3]=torch.random(1,10)
a[4]=torch.random(1,10)
a[5]=torch.random(1,10)
x=torch.random(1,5)
a[x]=-1

b=model:forward(a)
-- 見やすいように、出力結局を十倍にして小数点以下きりすてます
b=torch.round(b*10)
print("INPUT :"..a[1]..","..a[2]..","..a[3]..","..a[4]..","..a[5])
print("ANSWER:"..b[1]..","..b[2]..","..b[3]..","..b[4]..","..b[5])
print("------")

end
==============================================
これで実行すると、ちゃんと-1の値と同じ位置の出力結局が9(限りなく10に近いのですが、小数点以下切り捨てのため9になってます)

STEST4.png

ちなみに、今回は5つの入力と同じ、出力も5つにしました。
これがもっとも簡単なパターンです。

もしこれを、出力のデータを1個にして、-1が1番目だったら1、5番目だったら5、というように出力させようとすると…かなり難しくなります。
(人工知能関係を解説しているサイトや、書籍でも説明が面倒なのか、当たり前すぎる事なのか、意外と説明はありません)

それを説明しますので、次回はちょっとだけ難しくなります…


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:学問

nice! 0

コメント 0

コメントを書く

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

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

トラックバック 0

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