過去記事まとめ Lua版 ゼロから作るDeep Learning まとめ はじめに 今回は原書4章の二層ニューラルネットワークを実装します。 スクリプトは以下の通りです。 --Copyright (C) 2017 Kazuki Nakamae --Released under MIT License --license available in LICENSE file common = require './common' --[[***クラスの定義*******************************************************************]] --- simpleNetクラス(オブジェクト) -- 単純なニューラルネットワークを生成する -- @param input_size 入力層のニューロン数{Type:Tensor} -- @param
git clone https://github.com/Kazuki-Nakamae/Lua_DLfromScratch はじめに 前回は原書4章の二層ニューラルネットワークを実装し、それによるMNISTの学習処理を実装することになっていましたが、現状の数値微分による勾配算出では遅すぎるため、まず誤差逆伝搬法の実装をしてから学習実装したいと思います。 今回はまず単純な加算レイヤと乗算レイヤ実装です。スクリプトは以下の通りです。 --Copyright (C) 2017 Kazuki Nakamae --Released under MIT License --license available in LICENSE file --- MulLayerクラス(オブジェクト) -- 乗算レイヤを実装 MulLayer={} MulLayer.new = function() local ob
--Copyright (C) 2017 Kazuki Nakamae --Released under MIT License --license available in LICENSE file common = require './common' --- simpleNetクラス(オブジェクト) -- 単純なニューラルネットワークを生成する -- @param isConstW 重みを固定 {Type:Bool} simpleNet={} simpleNet.new = function(isConstW) local obj={} --メンバ変数 if isConstW then --原書で紹介されている重みを使用 obj.W = torch.Tensor({{0.47355232, 0.9977393, 0.84668094}, {0.85557411, 0.03563661
require 'gnuplot' require './gradient_2d.lua' ---勾配探索関数. -- 与えられた関数と初期値で勾配を計算し、最終的な値とステップごとの勾配の値を返す。 -- @param f 入力値 (Type:function) -- @param init_x 初期値 (Type:1D Tensor) -- @param lr 学習率 (Type:number [default : 0.01]) -- @param step_num 最大ステップ数 (Type:number [default : 100]) -- @return 最終的な値, ステップごとの関数の値 (Type:1D Tensor, Tensor) function gradient_descent(f, init_x, lr, step_num) --デフォルト引数 if not l
require 'gnuplot' ---勾配算出関数. -- 入力値に対する多変数関数の勾配を求める -- @param f 多変数関数 (Type:function) -- @param x 入力値 (Type:Tensor ※1D Tensor) -- @return 入力値に対する勾配の値 (Type:Tensor) function _numerical_gradient_no_batch(f, x) local h = 1e-4 -- 0.0001 grad = x:clone():zero() for idx = 1, x:size()[1] do local tmp_val = x:float()[idx] x[idx] = tmp_val + h --一つの要素だけ動かす local fxh1 = f(x) -- f(x+h) x[idx] = tmp_val - h l
require './activationFunc.lua' require './softmax.lua' require './exTorch.lua' require 'image' npy4th = require 'npy4th' --https://github.com/htwaijry/npy4th (Author:Hani Altwaijry) ---データ取得関数 -- MNISTのデータ取得する。 -- @return テストデータのイメージ ,テストデータのラベル {Type:ByteTensor} function get_data() --download local tar = 'http://torch7.s3-website-us-east-1.amazonaws.com/data/mnist.t7.tgz' if not paths.dirp('mnist
require './activationFunc.lua' require './softmax.lua' require './exTorch.lua' npy4th = require 'npy4th' --https://github.com/htwaijry/npy4th (Author:Hani Altwaijry) ---データ取得関数 -- MNISTのデータ取得する。 -- @return テストデータのイメージ ,テストデータのラベル {Type:ByteTensor} function get_data() --画像データ local x_test = npy4th.loadnpy('x_test.npy') --ラベルデータ local t_test = npy4th.loadnpy('t_test.npy') return x_test, t_test end -
---2乗和誤差算出関数 -- テンソル同士の2乗和誤差(∑(yi-ti)^2)/2を求める -- @param y 入力1、今回はNNが出力する確率リスト {Type:Tensor} -- @param t 入力2、今回は正解ラベルリスト {Type:ByteTensor} -- @return 2乗和誤差 {Type:number} function mean_squared_error(y, t) return ( y:double() - t:double() ):pow(2):sum() * 0.5 end local t = torch.Tensor({0,0,1,0,0,0,0,0,0,0}) local y = torch.Tensor({0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0}) print(mean_squa
#!/usr/local/bin/python3 # coding: utf-8 """ pklファイルの内容をnpzファイルへ出力する。 """ __author__ = "Kazuki Nakamae <kazukinakamae@gmail.com>" __version__ = "0.00" __date__ = "22 Jun 2017" import sys import numpy as np import pickle def pkl2npz(infn, outfn): """ @function pkl2npz(); pklファイルの内容をnpzファイルへ出力する。 @param {string} infn : 入力ファイル名 @param {string} outfn : 出力ファイル名 """ with open(infn, 'rb') as f: ndarr = p
require 'gnuplot' ---ステップ関数. -- 入力の各成分が0を超えたときに1を返す -- @param x 入力 (Type:torch.DoubleTensor) -- @return 1 or 0 (Type:torch.ByteTensor) function step_function(x) local y = torch.gt(x, 0) -- '>' 演算子の代わり return y end ---シグモイド関数. -- 入力の各成分に対するゲイン1の標準シグモイド関数(1/(1+exp(x)))の値を返す -- @param x 入力 (Type:torch.DoubleTensor) -- @return torch.DoubleTensor function sigmoid(x) y = x:clone():fill(1) return torch.c
---ANDゲート関数. -- 入力1、2の両方が入力されたときに1を返す -- @param x1 入力1 -- @param x2 入力2 -- @return 1 or 0 function AND(x1, x2) local x = torch.Tensor({x1, x2}) local w = torch.Tensor({0.5,0.5}) --重み local b = -0.7 --バイアス local temp = w:dot(x)+b -- torch.sum(w:cmul(x))+b とも書ける if temp <= 0 then return 0 else return 1 end end ---NANDゲート関数. -- 入力1、2の両方が入力されたときに0を返す -- @param x1 入力1 -- @param x2 入力2 -- @return 1 or 0
初めに 前記事でTorchの基本的な使い方を紹介したので今回は応用編としてパラメータの初期化やファインチューニング、その他便利ツール、ライブラリについて紹介します。 パラメータの初期化 torchのパラメータ初期化方法は様々ありますが単純な方法として以下の記述で行うことができます。 require 'nn' fc = nn.Linear(10,10) fc.weight:uniform(-0.1, 0.1) 上記コードは入力10ユニット、出力10ユニットの全結合層に対し、重みを[-0.1,0.1]の範囲で初期化しました。uniform関数を他の関数に変えることで様々な方法で初期化を行えます。 また、nninitと言うlibraryが用意されており、これを使うことでxavierやDelving deep into rectifiers: Surpassing human-level perf
#初めに この記事はTorchの基本的な使い方の解説?をします。ちょっとした応用や便利ツールなどはこちら caffe,chainer,theanoとdeeplearningライブラリを使ってきて最近torchに乗り換えたのでtorchについてのチュートリアルをまとめます。 コードはこちらの公式チュートリアルの2_supervisedを参考にしました。 #torchについて 日本ではdeeplearningのライブラリといえばcaffeに始まり、最近勢いのあるTensorflowや日本で開発がされているchainerなどが主流で、あまりtorchは使われていないように思えます。しかし、世界的にはtorchは主流のdeeplearningライブラリで、Facebookが使用していることでも有名です。画像処理における最新の手法の実装も多く、Fast R-CNNで使われているROIPoolingや
最近、チャットボットが話題となっていますが、自然な会話を成り立たせること、は大きな課題の一つです。 ここでは、Deep Learningの一種である、Seq2Seqモデルを用いて、チャットボットを動作させてみます。 ゴールとして、英語を学習させ、実際に会話を行ってみることを目指します。 Seq2Seq (Sequence to Sequence) モデルとは 平たく言うと、ある文字列から、次の文字列を予測するモデルのことです。 上記の図では、「ABC」を入力として、「WXYZ」を出力 (予測) しています。 Seq2Seqモデルの対話タスクへの応用を試みたのがGoogleで、2015年に下記の論文を発表しています。 A Neural Conversational Model http://arxiv.org/abs/1506.05869 これまでの対話モデルは、ドメインを絞り (飛行機を予
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く