ディープラーニングの勉強
2017年02月22日
オライリーのディープラーニングの本を読んでる。
ディープラーニングについてざっくりと掴んだ部分を書いていく。
ディープラーニングとは → ニューラルネットワークの演算処理を行う層を深くしたもの。
ニューラルネットワークとは → ヒトの脳の学習を模倣する手段。
学習ということを表現できる手段として、パーセプトロンがある。
パーセプトロンとは

図で表すと、

が入力値、
が出力値(1 or 0)、
が重み係数。
が閾値(ニューロンの発火点と言われる)。
出力が1か0という点で論理回路のように振る舞う。ただし変数が5つあり、それぞれが自由に振る舞うとなると、かなり複雑。
本の中では1つのパーセプトロンでANDとORを、3つ使ってXORを実装している。たくさんのパーセプトロンを使えば複雑な演算処理が可能。
一つのパーセプトロンで線形分離可能な問題の学習(実装)が可能(足し算、掛け算…)。複数重ねることで非線形な問題にも対応可能。
ディープラーニングについてざっくりと掴んだ部分を書いていく。
ディープラーニングとは → ニューラルネットワークの演算処理を行う層を深くしたもの。
ニューラルネットワークとは → ヒトの脳の学習を模倣する手段。
学習ということを表現できる手段として、パーセプトロンがある。
パーセプトロンとは

図で表すと、





出力が1か0という点で論理回路のように振る舞う。ただし変数が5つあり、それぞれが自由に振る舞うとなると、かなり複雑。
本の中では1つのパーセプトロンでANDとORを、3つ使ってXORを実装している。たくさんのパーセプトロンを使えば複雑な演算処理が可能。
一つのパーセプトロンで線形分離可能な問題の学習(実装)が可能(足し算、掛け算…)。複数重ねることで非線形な問題にも対応可能。
写真をPaaSのウェブサーバで公開
2016年09月13日
新海誠監督の「君の名は。」を観て久しぶりに風景の写真を撮りたくなって醒ヶ井に行きました。
撮った写真を公開するサーバを立ち上げてみました。
http://photoviewer-wakin.rhcloud.com/
スペックは低いですが無料でPaaSを利用できるサービスOpenShiftを利用します。
※Gitが必要です。
アカウント登録して、New Applicationを作ります。
アプリケーションのひな形を聞いてきますが、Webサーバであればいいので、適当に(本当に適当に)PHP5.4を選びました。
URLを決めてアプリケーションを作ります。
しばらく待つとウェブサーバが出来上がります。
画面上にはGitのcloneのコマンドが表示されていますので、これをコピーして自分のローカルの作業フォルダに落としてきます。
要は落としてきたフォルダが公開領域になりますので、そこに公開したいファイル群をコピーします。

こんな感じです。imagesの下に公開したいファイルをリサイズして連番で置いています。
画像のリサイズ、連番化はRelphaでやりました。
画像は一気に読み込むのでなく、スクロールして近づいてきたものを順次読み込むようにしてあります。
Lazy Load
サーバにアップするまえにブラウザで動作確認が出来ます。
問題なければ
git add .
git commit -m "適当なコメント"
git push
でサーバにアップロードされ、かつ勝手に再起動されます。
少し待つと公開されています。
醒ヶ井は駅から歩いて数分のところに地蔵川という湧き水の小さな川がありました。
梅花藻の花も見れました。
水槽に入れられて見れるようにしてあったハリヨが可愛かったです。
撮った写真を公開するサーバを立ち上げてみました。
http://photoviewer-wakin.rhcloud.com/
スペックは低いですが無料でPaaSを利用できるサービスOpenShiftを利用します。
※Gitが必要です。
アカウント登録して、New Applicationを作ります。
アプリケーションのひな形を聞いてきますが、Webサーバであればいいので、適当に(本当に適当に)PHP5.4を選びました。
URLを決めてアプリケーションを作ります。
しばらく待つとウェブサーバが出来上がります。
画面上にはGitのcloneのコマンドが表示されていますので、これをコピーして自分のローカルの作業フォルダに落としてきます。
要は落としてきたフォルダが公開領域になりますので、そこに公開したいファイル群をコピーします。

こんな感じです。imagesの下に公開したいファイルをリサイズして連番で置いています。
画像のリサイズ、連番化はRelphaでやりました。
画像は一気に読み込むのでなく、スクロールして近づいてきたものを順次読み込むようにしてあります。
Lazy Load
サーバにアップするまえにブラウザで動作確認が出来ます。
問題なければ
git add .
git commit -m "適当なコメント"
git push
でサーバにアップロードされ、かつ勝手に再起動されます。
少し待つと公開されています。
醒ヶ井は駅から歩いて数分のところに地蔵川という湧き水の小さな川がありました。
梅花藻の花も見れました。
水槽に入れられて見れるようにしてあったハリヨが可愛かったです。
メール配信サーバにDNSキャッシュをもたせる
2015年11月04日
メール配信サーバの配信遅延をなんとかすることになった。
メールログを見てみるとstatus=deferredになってdsn=4.4.3でルーティンサーバエラーとのこと。
DNSサーバのログを見るとどうも「お前聞きに来すぎ」ってことでサーバ(正確にはその前のFW)から弾かれているようだった。
じゃあMXレコードを自分でキャッシュするようにしたらいいのかな、と考える。
検索してみるとdnsmasqというのが見つかる。
構築して dig yahoo.co.jp を2回叩いてみると、確かにキャッシュされている。やったーと思ったら、 dig yahoo.co.jp mx を2回叩いてもキャッシュされていない。特に設定するような箇所は見当たらない。色々調べてみるが、海外の人のつぶやきに「don't caching mx record?」というのを見つける(ソース見失う…)。MXレコードはキャッシュしない?
諦めて別のを探してみるとunboundというを見つける。
入れてみて dig yahoo.co.jp mx を2回叩くと、2回めが0msecで帰ってきた。キャッシュされてる模様(DNSサーバにログが残らない)。
unboundはキャッシュ状況の確認とかそのクリアとか出来るコマンドが用意されていてdnsmasqより使えそう。あと日本語の解説ページが用意されている。
導入、設定は以下の通り。
リポジトリ追加(ver.1.5を入れる。1.4は脆弱性があるらしい)
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# yum install unbound
設定ファイル編集
# vi /etc/unbound/unbound.conf
編集箇所はだいたいここと同じだが、起動が失敗して「root.anchorが読めない」とかよくわからないログが出てくるので、
#dlv-anchor-file: "/etc/unbound/dlv.isc.org.key"
#auto-trust-anchor-file: "/var/lib/unbound/root.anchor"
ここ2箇所をコメントアウトしてしまう。DNSSECを有効にするための設定のようだが、問い合わせ受付を access-control で自分自身のみにしているので問題無いかな?
(ここを確認。一応あとで見なおしておく)
またunboundは内部にルートDNSの13のIPアドレスを持っており(unbound-control list_stubs)、resolve.confの1行目で解決しないとルートDNSに問い合わせに行くという事をしているようで(妙に問い合わせに時間がかかっている)、意図したDNSサーバに問い合わせに行かせられなかった(DNSサーバにログが残らなかった)。
そのためforwardを設定し、全てのDNS問い合わせをresolve.confに書いているサーバに聞きに行くようにした。
forward-zone:
name: "."
forward-addr: ○.○.○.○(問い合わせに行かせたいDNSサーバ)
/var/run/unbound ディレクトリ作成、権限をunbound:unboundに変更
/var/log/unbound.log ファイル作成、権限をunbound:unboundに変更
resolve.confに
nameserver 127.0.0.1
を先頭に書き加える。
unboundを起動。以上。
メールログを見てみるとstatus=deferredになってdsn=4.4.3でルーティンサーバエラーとのこと。
DNSサーバのログを見るとどうも「お前聞きに来すぎ」ってことでサーバ(正確にはその前のFW)から弾かれているようだった。
じゃあMXレコードを自分でキャッシュするようにしたらいいのかな、と考える。
検索してみるとdnsmasqというのが見つかる。
構築して dig yahoo.co.jp を2回叩いてみると、確かにキャッシュされている。やったーと思ったら、 dig yahoo.co.jp mx を2回叩いてもキャッシュされていない。特に設定するような箇所は見当たらない。色々調べてみるが、海外の人のつぶやきに「don't caching mx record?」というのを見つける(ソース見失う…)。MXレコードはキャッシュしない?
諦めて別のを探してみるとunboundというを見つける。
入れてみて dig yahoo.co.jp mx を2回叩くと、2回めが0msecで帰ってきた。キャッシュされてる模様(DNSサーバにログが残らない)。
unboundはキャッシュ状況の確認とかそのクリアとか出来るコマンドが用意されていてdnsmasqより使えそう。あと日本語の解説ページが用意されている。
導入、設定は以下の通り。
リポジトリ追加(ver.1.5を入れる。1.4は脆弱性があるらしい)
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# yum install unbound
設定ファイル編集
# vi /etc/unbound/unbound.conf
編集箇所はだいたいここと同じだが、起動が失敗して「root.anchorが読めない」とかよくわからないログが出てくるので、
#dlv-anchor-file: "/etc/unbound/dlv.isc.org.key"
#auto-trust-anchor-file: "/var/lib/unbound/root.anchor"
ここ2箇所をコメントアウトしてしまう。DNSSECを有効にするための設定のようだが、問い合わせ受付を access-control で自分自身のみにしているので問題無いかな?
(ここを確認。一応あとで見なおしておく)
またunboundは内部にルートDNSの13のIPアドレスを持っており(unbound-control list_stubs)、resolve.confの1行目で解決しないとルートDNSに問い合わせに行くという事をしているようで(妙に問い合わせに時間がかかっている)、意図したDNSサーバに問い合わせに行かせられなかった(DNSサーバにログが残らなかった)。
そのためforwardを設定し、全てのDNS問い合わせをresolve.confに書いているサーバに聞きに行くようにした。
forward-zone:
name: "."
forward-addr: ○.○.○.○(問い合わせに行かせたいDNSサーバ)
/var/run/unbound ディレクトリ作成、権限をunbound:unboundに変更
/var/log/unbound.log ファイル作成、権限をunbound:unboundに変更
resolve.confに
nameserver 127.0.0.1
を先頭に書き加える。
unboundを起動。以上。
年末東京旅行
2015年01月08日
年末28~30日に東京旅行してきました。
簡単にまとめていきます。
28日、東京着。
秋葉原に行って28日までのSHIROBAKO展で原画を見てきた。

そこから少し北に上がってガード下に店が並んでいるところで青葉でラーメンを食べる。

ラーメンはつるつるな麺がおいしかった。

その後世田谷に行く。
そこでOpenSourceCafeというコワーキングスペースで開かれたCode for Setagayaに、滋賀県民ながら参加してみた。


選挙をハックするという内容で、次々アイデアが出て何かが出来上がっていく様子を眺めていた。

本棚にはいろんな本が並んでいる。1000円でドリンクつきで一日いられるスペースとのこと。wifi環境あり。集中するにはいいスペースだと感じた。
18時に終わって、そこから渋谷にて同じく滋賀から東京へ年末上京していた友人と晩御飯。色々店がある中で入り安そうな焼き鳥の居酒屋に入った。

写真は2人前の鳥鍋。鶏肉がおいしい店だった。
2日目。雨の中六本木に行ってみる。
朝ごはんを東京ミッドタウンで食べて森ビルに行って企業の名前を眺める。


昼飯は、池袋で食べたかった大勝軒のもりそば。サイドで頼んだ餃子の大きさにびっくりした。

ラーメン屋で食べる餃子としてはこれが一番おいしかったと思う。

昼過ぎからコミケ会場に行ってみる。雨は朝から降っていて、まだ少し振っていた。

帰る人も続々いる中で同じように14時ごろから向かう人も絶えずいる状況。
この日は下見な感じ。この下見が、3日目をほぼ個人行動する上で大切だった。
16時頃に会場を引き上げる。晩飯は秋葉原ということで友人とも別れる。
ここでスーパー銭湯に入りたいと思い、大江戸温泉物語に行ってみるが、みんな雨に濡れて温まりたいのは同じなようですごい混雑でした。
入り口の混雑だけを見てあきらめて、晩飯の予定の秋葉原近くで探すことにする。
江戸遊というスーパー銭湯を見つけて入ってみるが、「男」のみ時間待ちという状態。30分くらい待つ感じで待って、30分くらい待って入れた。
体を洗ってとりあえず温まるまでは湯につかれた。さくっと上がって友人と連絡を取ると、山手線がとまっているらしい。待ってると連絡してその間ずっとスーパー銭湯のリラックスルームでまったりしてた。この時間が一番幸せだったかもしれん。
友人が秋葉原に到着して晩飯。
3日目はコミケ会場に行ってきました。
簡単にまとめていきます。
28日、東京着。
秋葉原に行って28日までのSHIROBAKO展で原画を見てきた。
そこから少し北に上がってガード下に店が並んでいるところで青葉でラーメンを食べる。
ラーメンはつるつるな麺がおいしかった。
その後世田谷に行く。
そこでOpenSourceCafeというコワーキングスペースで開かれたCode for Setagayaに、滋賀県民ながら参加してみた。
選挙をハックするという内容で、次々アイデアが出て何かが出来上がっていく様子を眺めていた。
本棚にはいろんな本が並んでいる。1000円でドリンクつきで一日いられるスペースとのこと。wifi環境あり。集中するにはいいスペースだと感じた。
18時に終わって、そこから渋谷にて同じく滋賀から東京へ年末上京していた友人と晩御飯。色々店がある中で入り安そうな焼き鳥の居酒屋に入った。
写真は2人前の鳥鍋。鶏肉がおいしい店だった。
2日目。雨の中六本木に行ってみる。
朝ごはんを東京ミッドタウンで食べて森ビルに行って企業の名前を眺める。
昼飯は、池袋で食べたかった大勝軒のもりそば。サイドで頼んだ餃子の大きさにびっくりした。
ラーメン屋で食べる餃子としてはこれが一番おいしかったと思う。
昼過ぎからコミケ会場に行ってみる。雨は朝から降っていて、まだ少し振っていた。
帰る人も続々いる中で同じように14時ごろから向かう人も絶えずいる状況。
この日は下見な感じ。この下見が、3日目をほぼ個人行動する上で大切だった。
16時頃に会場を引き上げる。晩飯は秋葉原ということで友人とも別れる。
ここでスーパー銭湯に入りたいと思い、大江戸温泉物語に行ってみるが、みんな雨に濡れて温まりたいのは同じなようですごい混雑でした。
入り口の混雑だけを見てあきらめて、晩飯の予定の秋葉原近くで探すことにする。
江戸遊というスーパー銭湯を見つけて入ってみるが、「男」のみ時間待ちという状態。30分くらい待つ感じで待って、30分くらい待って入れた。
体を洗ってとりあえず温まるまでは湯につかれた。さくっと上がって友人と連絡を取ると、山手線がとまっているらしい。待ってると連絡してその間ずっとスーパー銭湯のリラックスルームでまったりしてた。この時間が一番幸せだったかもしれん。
友人が秋葉原に到着して晩飯。
3日目はコミケ会場に行ってきました。
Posted by
wakin
at
19:47
│Comments(
0
)
RAID1NASの構築
2014年12月16日
1TBのHDDがぼちぼち一杯になったので、増設を考える。
同時に前々から冗長性を持たせたいとも思ってたので、RAID1にしてみる。
RAIDケースとしてはRS-EC32を選択。なんか安定感がありそうだったので。
内臓HDDはWDのREDの3TB。これの二本でRAID1を構築する。
RAID1モードへの切り替えは、ケースにHDDと電源をさした状態で切り替えボタンを3秒長押し。説明書にやり方は書いてある。
つないでみると2TBのHDDと認識されてしまったので、この辺を参考にGPTというディスクタイプに変更して3TBのNASとして認識させた。
sdparmコマンドを使ってcronで定期的にスピンダウンさせるようにしている。
あと、前回VBSで書いたTVRockの録画後の処理のスクリプトで、保存先フォルダの名前が化けてファイル移動が失敗する場合がありました。ファイル名の後に空白があった場合の処理を追加しました。
同時に前々から冗長性を持たせたいとも思ってたので、RAID1にしてみる。
RAIDケースとしてはRS-EC32を選択。なんか安定感がありそうだったので。
内臓HDDはWDのREDの3TB。これの二本でRAID1を構築する。
RAID1モードへの切り替えは、ケースにHDDと電源をさした状態で切り替えボタンを3秒長押し。説明書にやり方は書いてある。
つないでみると2TBのHDDと認識されてしまったので、この辺を参考にGPTというディスクタイプに変更して3TBのNASとして認識させた。
sdparmコマンドを使ってcronで定期的にスピンダウンさせるようにしている。
あと、前回VBSで書いたTVRockの録画後の処理のスクリプトで、保存先フォルダの名前が化けてファイル移動が失敗する場合がありました。ファイル名の後に空白があった場合の処理を追加しました。
Set objFileSys = CreateObject("Scripting.FileSystemObject")
Set objParm = Wscript.Arguments
Set objRE = CreateObject("VBScript.RegExp")
objRE.Pattern = " +\\$"
WScript.Echo objParm(1)
Dim saveFolder
saveFolder = objRE.Replace(objParm(1), "\")
If Not objFileSys.FolderExists(saveFolder) Then objFileSys.CreateFolder saveFolder
nows = Right("0000" & Year(Now()) , 4 ) & Right("0" & Month(Now()) , 2) & Right("0" & Day(Now()) , 2)
nows = nows & Right("0" & Hour(Now()) , 2)& Right("0" & Minute(Now()) , 2) & Right("0" & Second(Now()) , 2)
outputFileName = saveFolder&objParm(2)&".ts"
If objFileSys.FileExists(outputFileName) Then outputFileName = saveFolder&objParm(2)&"_"&nows&".ts"
objFileSys.MoveFile objParm(0), outputFileName
Set objFolder = objFileSys.GetFolder(objParm(1))
txtFiles = ""
For Each objItem In objFolder.Files
txtFiles = txtFiles&objItem.Path&Chr(9)&objItem.Size/1024/1024&"MB"&vbCrLf
Next
Set objDrive = objFileSys.GetDrive("y:\")
textBody = objParm(0)&" saved."&vbCrLf&vbCrLf _
& "move to "&objParm(1)&vbCrLf&vbCrLf _
& txtFiles&vbCrLf _
& "Y:\"&vbCrLf _
& "all:"&Chr(9)&FormatNumber(objDrive.TotalSize/1024/1024/1024, 0)&"GB"&vbCrLf _
& "use:"&Chr(9)&FormatNumber((objDrive.TotalSize-objDrive.FreeSpace)/1024/1024/1024, 0)&"GB"&vbCrLf _
& "free:"&Chr(9)&FormatNumber(objDrive.FreeSpace/1024/1024/1024, 0)&"GB"
Set objMail = CreateObject("CDO.Message")
objMail.From = "(Fromアドレス)"
objMail.To = "(Toアドレス)"
objMail.Subject = "tvrock log"
objMail.TextBody = textBody
objMail.BodyPart.Charset = "iso-2022-jp"
strConfigurationField ="http://schemas.microsoft.com/cdo/configuration/"
With objMail.Configuration.Fields
.Item(strConfigurationField & "sendusing") = 2
.Item(strConfigurationField & "smtpserver") = "(SMTPサーバ名)"
.Item(strConfigurationField & "smtpserverport") = 465
.Item(strConfigurationField & "smtpusessl") = true
.Item(strConfigurationField & "smtpauthenticate") = 1
.Item(strConfigurationField & "sendusername") = "(メールアドレス)"
.Item(strConfigurationField & "sendpassword") = "(メールアカウントパスワード)"
.Item(strConfigurationField & "smtpconnectiontimeout") = 60
.Update
end With
objMail.Send
Set objMail = Nothing
Set objDrive =Nothing
Set objFolder = Nothing
Set objParm = Nothing
Set objFileSys = Nothing