torch7で小さくディープラーニング(1) [人工知能(ディープラーニング)]
まずは自力でディープラーニングをやってみます。
プログラムは以下のとおりです。
エディタなどで、打ち込んで、ファイルを保存、
torchを起動してから、dofile 'ファイル名'で実行させます。
【torch7の起動画面】
はじめに、学習用のデータを200個ほど作り、
そのあとでニューラル・ネットワークを定義、
学習用のパラメーターを設定して学習開始、
最後に学習できたか、検証します。
======================ここから
require 'nn'
dataset={}
-- ここでイレギュラーな設定しています(ここでデータを200個使うようにしています)
function dataset:size() return 200 end
for i=1,200 do
input=torch.randn(2)
input[1]=torch.random(0,10)
input[2]=torch.random(0,10)
output=torch.Tensor(2):zero()
if (input[1] > input[2]) then
output[1]=1
end
if (input[1] < input[2]) then
output[2]=1
end
dataset[i]={input,output}
end
-- 人工知能モデルの定義
model=nn.Sequential();
model:add(nn.Linear(2,5))
model:add(nn.Tanh())
model:add(nn.Linear(5,2))
model:add(nn.Tanh())
-- パラメーター
criterion = nn.MSECriterion()
trainer=nn.StochasticGradient(model,criterion)
trainer.learningRate=0.01
trainer.maxIteration=200
-- 学習開始(200回)
trainer:train(dataset)
-- 学習結果の検証
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],"|",a[2])
print("------")
end
======================ここまで
このプログラムで、数字をふたつtorch.Tensorで与えると大きな数字の方に1に近い数値を表示します。
学習用のデータセット作成をこのプログラム内で行っているため、そこにはif文がありますが、データセット作成以降は、直接ふたつの数字を比較してそれに反応するプログラムがないのが判ると思います。
人工知能モデルが、与えられたデータから(input)と(output)の関係を学習をしたのです。
このプログラムの中心部はここです。
-- 人工知能モデルの定義
model=nn.Sequential();
model:add(nn.Linear(2,5))
model:add(nn.Tanh())
model:add(nn.Linear(5,2))
model:add(nn.Tanh())
-- パラメーター
criterion = nn.MSECriterion()
trainer=nn.StochasticGradient(model,criterion)
trainer.learningRate=0.01
trainer.maxIteration=200
-- 学習開始(200回)
trainer:train(dataset)
これで人工知能モデルを作り、学習方法や学習用パラメーターを決めて学習を開始しています。
他にも、別の「入力データ2個と、出てくる答え2個のサンプル」を与えて学習させれば、それに応じた反応を返してくれます。
(望む内容によっては人工知能モデルの変更は必要になりますが)
…プログラム組んでないのに…答えが出てくる…
あれ? 俺、いらなくない? とか思いました…
(数日後そんなに簡単な事ではないと気がつくのですが…)
とはいえ、はじめてこの結果を見たときは、なんというか物凄い不気味さを感じました。
プログラムを組んでいないのに望んだ答えが出てくる…頭ではなんとか理解しようと思うのですが、自分の足下に妖怪というか、スライムが生まれた、というかそんな変な感覚に襲われました。
感情はないし、複雑な事は出来ないけど、データから答えを出す方法を学びやがった存在がいる。
これは衝撃でした。
この違和感は数日間抜けませんでした。
ぜひともこの感覚を味わって欲しいです!
いろいろな大学が公開している実験セットでは完璧過ぎて味わえない、不思議な感覚です…
次回は、このプログラムを変更してみます!
torch7と直接関係はないのですが、基本的なことがとても判りやすく解説されているのでお勧めの本です。
プログラムは以下のとおりです。
エディタなどで、打ち込んで、ファイルを保存、
torchを起動してから、dofile 'ファイル名'で実行させます。
【torch7の起動画面】
はじめに、学習用のデータを200個ほど作り、
そのあとでニューラル・ネットワークを定義、
学習用のパラメーターを設定して学習開始、
最後に学習できたか、検証します。
======================ここから
require 'nn'
dataset={}
-- ここでイレギュラーな設定しています(ここでデータを200個使うようにしています)
function dataset:size() return 200 end
for i=1,200 do
input=torch.randn(2)
input[1]=torch.random(0,10)
input[2]=torch.random(0,10)
output=torch.Tensor(2):zero()
if (input[1] > input[2]) then
output[1]=1
end
if (input[1] < input[2]) then
output[2]=1
end
dataset[i]={input,output}
end
-- 人工知能モデルの定義
model=nn.Sequential();
model:add(nn.Linear(2,5))
model:add(nn.Tanh())
model:add(nn.Linear(5,2))
model:add(nn.Tanh())
-- パラメーター
criterion = nn.MSECriterion()
trainer=nn.StochasticGradient(model,criterion)
trainer.learningRate=0.01
trainer.maxIteration=200
-- 学習開始(200回)
trainer:train(dataset)
-- 学習結果の検証
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],"|",a[2])
print("------")
end
======================ここまで
このプログラムで、数字をふたつtorch.Tensorで与えると大きな数字の方に1に近い数値を表示します。
学習用のデータセット作成をこのプログラム内で行っているため、そこにはif文がありますが、データセット作成以降は、直接ふたつの数字を比較してそれに反応するプログラムがないのが判ると思います。
人工知能モデルが、与えられたデータから(input)と(output)の関係を学習をしたのです。
このプログラムの中心部はここです。
-- 人工知能モデルの定義
model=nn.Sequential();
model:add(nn.Linear(2,5))
model:add(nn.Tanh())
model:add(nn.Linear(5,2))
model:add(nn.Tanh())
-- パラメーター
criterion = nn.MSECriterion()
trainer=nn.StochasticGradient(model,criterion)
trainer.learningRate=0.01
trainer.maxIteration=200
-- 学習開始(200回)
trainer:train(dataset)
これで人工知能モデルを作り、学習方法や学習用パラメーターを決めて学習を開始しています。
他にも、別の「入力データ2個と、出てくる答え2個のサンプル」を与えて学習させれば、それに応じた反応を返してくれます。
(望む内容によっては人工知能モデルの変更は必要になりますが)
…プログラム組んでないのに…答えが出てくる…
あれ? 俺、いらなくない? とか思いました…
(数日後そんなに簡単な事ではないと気がつくのですが…)
とはいえ、はじめてこの結果を見たときは、なんというか物凄い不気味さを感じました。
プログラムを組んでいないのに望んだ答えが出てくる…頭ではなんとか理解しようと思うのですが、自分の足下に妖怪というか、スライムが生まれた、というかそんな変な感覚に襲われました。
感情はないし、複雑な事は出来ないけど、データから答えを出す方法を学びやがった存在がいる。
これは衝撃でした。
この違和感は数日間抜けませんでした。
ぜひともこの感覚を味わって欲しいです!
いろいろな大学が公開している実験セットでは完璧過ぎて味わえない、不思議な感覚です…
次回は、このプログラムを変更してみます!
torch7と直接関係はないのですが、基本的なことがとても判りやすく解説されているのでお勧めの本です。
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
- 作者: 斎藤 康毅
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/09/24
- メディア: 単行本(ソフトカバー)
2016-12-20 00:04
nice!(0)
コメント(0)
トラックバック(0)
コメント 0