コンブ入りチョコレート [ロシア文化・日本文化]
少し前になりますが、チョコレートをいただきました。
「с морской капустой тёмный шоколад」とありますが…
「昆布入りチョコレート」です。
さすがに、粉末にされているのか、ペーストにされたのか、食べてみても食感としては「昆布」は判りませんでした。
味の方は、「あれ? 昆布っぽいかな?」という後味が微かにするぐらいで、何も言われないと気がつかないかもしれません。
日本のちょっと失敗した地元産品のお土産のような感じではなく、上品な味にまとめられています。
このチョコレート、他にも「с морской солью」塩入り(シーソルト入り)もあります(右から3番目)。
どこかで見かけたときには、お土産に良いかもしれません!
で、なんというか、ロシアにあるお菓子が、探してみると、日本のご当地お土産のノリに近いものもあって、結構好きです。
ポテトチップス「行者ニンニク味(ネギ味)」とか…
ポテトチップス「イクラ味」とか…
ポテトチップス「カニ味」とか…
で、それがちゃんと一定のレベルを超えているのが面白いです。
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になってます)
ちなみに、今回は5つの入力と同じ、出力も5つにしました。
これがもっとも簡単なパターンです。
もしこれを、出力のデータを1個にして、-1が1番目だったら1、5番目だったら5、というように出力させようとすると…かなり難しくなります。
(人工知能関係を解説しているサイトや、書籍でも説明が面倒なのか、当たり前すぎる事なのか、意外と説明はありません)
それを説明しますので、次回はちょっとだけ難しくなります…
==================================ここから
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になってます)
ちなみに、今回は5つの入力と同じ、出力も5つにしました。
これがもっとも簡単なパターンです。
もしこれを、出力のデータを1個にして、-1が1番目だったら1、5番目だったら5、というように出力させようとすると…かなり難しくなります。
(人工知能関係を解説しているサイトや、書籍でも説明が面倒なのか、当たり前すぎる事なのか、意外と説明はありません)
それを説明しますので、次回はちょっとだけ難しくなります…