投稿

2018の投稿を表示しています

Run Jupyter notebook GPU on AMAZON AWS

Followed this page and worked perfectly. Don't forget to stop when you don 't use it.

https://aws.amazon.com/blogs/machine-learning/get-started-with-deep-learning-using-the-aws-deep-learning-ami/

GANに関する記事をメモ

[CVPR 2018 Tutorial on GANs] Introduction to Generative Adversarial Networks
https://qiita.com/yh-iro/items/3a046d10487a6701139a CVPR2018のGANの手法がいくつか紹介されている。

KERASによるWGAN, SNGANの実装が置いてある https://github.com/jason71995/Keras-GAN-Library/tree/master/gan_libs
SNGANのKERASによる実装 https://github.com/IShengFang/SpectralNormalizationKeras
はじめてのGAN https://elix-tech.github.io/ja/2017/02/06/gan.html 2017年以前のGANの紹介されていてわかりやすい。

ディープラーニングを使って、画像からソースコードの生成

フロントの画像から、htmlやcssを自動生成する研究の紹介です。

電話応答やSiriなどに人の言葉の自動生成がよく知られているが、人が話す自然言語にくらべて、文脈自由文法であるプログラミング言語の方がはるかに単純な構造だし語彙も少ないので、ソースコードの自動生成の方がずっと容易なのであろう。

Floydhubに記載されたこちらの記事が参考になる。単語をみなone-hot-vectorになおして推定したようである。
https://blog.floydhub.com/turning-design-mockups-into-code-with-deep-learning/

Frontend developer Handbook 2018(*)には、軽いコーダーとフロントエンドエンジニアはようやく区別されるようになると書いてあった。区別がわからない人のために非常に簡単に説明すると、コーダーは、htmlやjavascriptやcssを使って簡単なページを作れる人を指す。一方、フロントエンドエンジニアは、ReactやDOJOやAngularを使い、画面をコンポーネント群に分けて設計も行う人たちのことを呼ぶ。このpix2codeプロジェクトは、コーダーの仕事を奪いうるものであり、フロントエンドエンジニアとの技術的な歴然たる差を見せつけたように感じられた。

さらによく調べると、code2pixというdecoderも開発したらしい。これでAutoencoderのようなものを作ったが簡単に成功しなかったとのこと。



もとになっている論文
https://arxiv.org/abs/1705.07962

airbnbによるプロトタイプの紹介記事
https://airbnb.design/sketching-interfaces/

code2pix
https://towardsdatascience.com/code2pix-deep-learning-compiler-for-graphical-user-interfaces-1256c346950b

Reference Frontend developer Handbook 2018
https://frontendmasters.com/books/front-end-handbook/2018/

mvコマンドを使って多くのファイルの移動しようとしてargument list too longが出た時の対処法

mv source/* target/

としようとして、ファイル数が多すぎて (およそ10万件)エラーを発生した場合、

ls source | xargs -I{} source/{} target/

とすることで解決することを確認した。

他の方法はこちらにありますが、上記の方が個人的にはわかりやすかった。
https://stackoverflow.com/questions/11942422/moving-large-number-of-files

lsとfindの比較にはこちらが参考になる
https://qiita.com/stc1988/items/e3a1d7dccafe4ab573fa

Break numpy 2d array into patches and get it back

Here is a code

defsplit_array(arr,nrows,ncols):h,w=arr.shapereturn(arr.reshape(h//nrows,nrows,-1,ncols).swapaxes(1,2).reshape(-1,nrows,ncols))definv_split_array(arr,rows,cols):sub_rows,sub_cols=arr[0].shapereturn(subarr.reshape(rows//sub_rows,cols//sub_cols,sub_rows,sub_cols).transpose((0,2,1,3)).reshape(row,cols))

Sample outputs below

row,col=2*4,2*6arr=np.array(range(1,row*col+1))arr=arr.reshape(row,col)print(arr)subarr=split_array(arr,2,2)print(subarr)# arr2 = subarr.reshape(2,2,2,2).swapaxes(1,2).reshape(4,4)subarr=subarr.reshape(4,6,2,2).transpose((0,2,1,3))print(subarr)arr2=subarr.reshape(row,col)print(arr2)
[[ 1 2 3 4 5 6 7 8 9 10 11 12] [13 14 15 16 17 18 19 20 21 22 23 24] [25 26 27 28 29 30 31 32 33 34 35 36] [37 38 39 40 41 42 43 44 45 46 47 48] [49 50 51 52 53 54 55 56 57 58 59 60] [61 62 63 64 65 66 67 68 69 70 71 72] [73 74 75 76 77 78 79 80 81 82 83 84] [85 86 87 88 89 90 91 92 93 94 95 96]] [[[ 1 2] [13 14]] [[ 3 4] [15 16]] [[ 5 6] [17 18]] …

MNISTを使ったautoencoderの比較

イメージ
I ran 10 epoch on my Macbook Pro. It took around 10+ minutes. Running condition were

- Input size was (32, 32, 1)
- Output of autoencoder was the input of discriminator.
- Discriminator outputs (2, 2, 1) i.e. four patches.
- 1000 batch / epoch
- 1 sample / batch
- Loss function of autoencoder + discriminator(untrainable) was mse(discriminator) + 100 * mae(autoencoder)
- Loss function of discriminator was mse
- Optimizer was Adam(0.0002, 0.5) for autoencoder and discriminator

, and also I changed the last of two conditions and trained again.

Network architecture is shown afater result.
Result 3 conv + 3 deconv

Looks nicest among the results.

3 conv + 3 deconv + res

It may need more time to train.

3 conv + 3 deconv + skip


5 conv + 5 deconv


3 conv + 3 deconv with optimizer, SGD(momentum=0.2) for autoencoder



3 conv + 3 deconv with mse for autoencoder loss


It looks a little blurrer than mae loss.

I compared loss and accuracy of optimizer Adam and SGD and SGD was faster to converge and achi…

MacOSにMySQL8.0.11をインストールしてmysql -uroot が使えずはまった話

sockのpermissionで怒られたりpidファイルがないと怒られたりしながら、大変な苦労をしてしまった。

参考になったサイトは記事の最下部に記した。terminalで

$ mysqld_safe --skip-grant-tables &
というコマンドをsudoなしで実行すると、mysqlが認証なしでforgroundで起動した。そのターミナルはmysqlを起動したまま、別のterminalを開いた。そのターミナルで、 $ mysql -urootを実行してmysqlに入り、
mysql> flush privileges;mysql> ALTERUSER'root'@'localhost'IDENTIFIEDBY'MyNewPass'; mysql> flush privileges;
を実行することでパスワードを変更する。flush privilegesは最初にも実行しないと、passwordを変更する権限が得られなかった。

https://stackoverflow.com/questions/2101694/how-to-set-root-password-to-null
https://unix.stackexchange.com/questions/58655/turn-off-skip-grant-tables-in-mysql

store key pair in AWS ec2

~/.aws/credentials
seems nice to store your key as described in boto documents

chmod 700 ~/.aws/credentials
chmod 004 ~/.aws/rootkey.csv

[Raspberry Pi] 赤外線を保存する Record infrared light

前記事: [Raspberry Pi] 赤外線を読み取る Detect infrared light

前回の記事では、赤外線モジュールに赤外線を感知させるところまでやりました。今回は、Raspberry Piに赤外線リモコンのコードを覚えさせます。


LIRCの再起動 $ sudo /etc/init.d/lirc stop
$ sudo /etc/init.d/lirc start

とし、LIRCを再起動します。


リモコンのコードを書き出す 今回は、電気 (light) のリモコン (remote controller) をlight_cont.confに書き出します。これはリモコンごとにファイルに書き出します。ファイル名はリモコンの番号や社名などにするとよいです。


$ sudo irrecord -n -d /dev/lirc0 light_cont.conf

とします。さらに続けてEnterを二度押し、リモコンの学習させたいボタンを全て押します。今回のリモコンは天井ライト用の三洋電機のSLR-271、赤外線受信モジュールはPL-IRM1261-C438 (PARA LIGHT)です。

もし、
irrecord -  application for recording IR-codes for usage with lirc

Copyright (C) 1998,1999 Christoph Bartelmus(lirc@bartelmus.de)

irrecord: could not open /dev/lirc0
irrecord: default_init(): Device or resource busy
irrecord: could not init hardware (lircd running ? --> close it, check permissions)


と出たら、
$ sudo /etc/init.d/lirc stop

としてLIRCを止めておきます。うまくいけば、次のように学習が始まります。


pi@raspberrypi:~ $ sudo irrecord -n -d /dev/lirc0 light_cont.conf

irrecord -  application for recording IR-codes for …

ルーマニア革命の動画

イメージ
1989年の冬にニコラエ・チャウシェスクの独裁政権が革命によって倒れる七日間の動画が上がっていた。革命の一ヶ月後の放送なので、もう30年近く前のテレビ放送だ。
一気に最後まで観てしまった。

遊牧生活は自殺率を高くするのか

イメージ
仮説だが、 『遊牧民の自殺率は定住民の自殺率よりも高い』のではないだろうか。というのも、実体験から、帰る場所が不安定といった、どこかにアンカーを降ろさない生活をしていると、いつでも死んでよい、いつでも消えてよいような気がしてくるからだ。

荷物が少ないこと 荷物が少ないことをよいとする人たちがいる。ミニマリズムを崇拝し、何もない部屋でless is moreを説き、断捨離という新語をありがたく使い、座禅をよくわかってないのにZEN LIFEを語る人たちだ。ほら、この動画のように。



荷物が少ないのは、身軽なようでいながら、見方を変えれば、まるで死ぬ準備をしているようだ。持ち物がないのは、世の中に未練がなさすぎる。私の持ち物も全てリュックに全ておさまる。三日間の洋服と、仕事に使うノートパソコンと、一冊の本ぐらいしかない。この一年間で三回引っ越した。もはや荷物なんか持っていられない。洋服もシーズンが変わるごとに捨てている。ファストファッションありがとう。靴も革靴があればいい。オンもオフも足りるから。本当は、フランス語のテキストや中国語の問題集なども持っておきたい。持っておきたいというか、今は持っている。今は仮住まいの部屋に何冊かの本が置いてある。また出て行くことになるころには全て読み終わり処分していることだろう。

未練や執着がないのは仏教では望ましいが、出家は、残された人からしたら、生きながら死なれるようなものだった。出家は「世を捨つ」とも言う。愛した女が出家してしまって涙の止まらない男の話もよくある。

伝統的な遊牧民は自殺率が高いのか

遊牧民の自殺率の調査は何かを教えてくれるだろうか。コロラド大学アンシュッツ・メディカル・キャンパスのJames (Jay) H. Shore教授によるIndian (native american)の自殺率の報告について、Risk Factors for Youth Suicide, 2013 という本の中で取り上げられていた。


suicide rates are high among traditionally nomadic tribes and lower among agricultural village tribes. 自殺率は伝統的な遊牧民の間で高く、農耕民族の間では低い (Risk Factors for Youth S…

所有格の-sとofの使い分け

非常にためになる記事で、何年間もブラウザのブックマークにいたので紹介したい。
http://d.hatena.ne.jp/rhb/20091223/p1

大まかに言えば、-sは人に使い、ofは無生物に使います。

しかし、today's paperのように、人の集合でもない無生物のtodayに'sがつく例の説明がなくて困った。慣用表現であろうか。次のように、-sとofでは明確に意味が異なr

today's newspapers(今日の新聞)
newspapers of today(現代の新聞)

pix2pixの学習過程の描画

イメージ
pix2pixを使ってposeからアニメ画像の生成の学習を進めたときの途中経過をtest画像で描画した。
5枚で学習

『情報幾何学」の新展開が届きました。

イメージ
ディープラーニングの裏にある数学を理解したいと思っていたところ、情報幾何という分野があることを知り、本書を購入。多様体、リーマン幾何学、統計的推論から機械学習まで盛りだくさん。読みます。

[WordPress] WP TOTAL CACHEを使うとレイアウトが崩れた。minifyが原因でした。

wordpressで高速化のためにWP TOTAL CACHEを導入したらスタイルが崩れたときの話。

状況 親テーマのstorefrontを継承したstorefront-childというテーマを作り、home.cssを作って読み込ませた。
WP TOTAL CACHEを使用してページキャッシュやminifyを行ったところ、home.cssの一部が読まれなくなった。

原因 ソースコードをよく見ると、minifyされたhome.cssはwp-content/cache/minifyにある英数字の文字列.cssというminifyファイルとして保存されており、それはhtml中のheadの最初に呼ばれていた。home.cssには、親テーマのcssを上書きしている部分があり、親テーマよりもhome.cssのminifyされたファイルが先に呼び出されていたために、上書きがきかなくなっていた様子。
解決策 呼び出し順序を変えられるようには見えないので、WP TOTAL CACHEのminify機能は使わないことにした。

FontAwesome ver 5 をCSSの擬似要素で使うときは font-family: "Font Awesome 5 Free" で指定

イメージ
.anchor-product {
  background-color: lightgreen;
  font-weight: bold;
  color: black;
  border-radius: 25px;
  font-size: 10pt;
  padding: 0.1rem 0.2rem;
}

.anchor-product::before {
  font-family: "Font Awesome 5 Free";
  content: "\f07a";
  padding-right: 5px;
}

とすると



のように表示された。 ver4までは

font-family: "FontAwesome"

だったので注意。<i>では表示されるのに、CSS擬似要素では表示されず困惑した。

PatchGANの実装方法は一つ一つのPatchを作る必要はなく、画像全体を入力とすればよいことの説明

PatchGANを含む、たとえばpix2pixのソースコードを見ていても、Patchをそれぞれiterateしてるような記述がないじゃないかと思っていたが、それでいいらしい。

https://nodaki.hatenablog.com/entry/2018/07/27/235914

Q: And looks like discriminator you've implemented is just a conv net, not a patchgan that was mentioned in the paper.
A: Which is patch ij in the input? Well, output X_ij is just a neuron in a convnet, and we can trace back its receptive field to see which input pixels it is sensitive to.
(Question: PatchGAN Discriminator · Issue #39 · junyanz/pytorch-CycleGAN-and-pix2pix · GitHub)

kerasのpix2pixのコード。

イメージ
pix2pixのソースコードを書きました。主に、 https://github.com/eriklindernoren/Keras-GAN/tree/master/pix2pix にあるものをベースに、リファクタしつつ、notebook形式にしました。まだクラス間の無駄な結合などもありますが、とりあえず動くようになりました。 下記にhtmlを直接貼り付けました。
試みに、同一のデータを3つ、1 batchに1データ、1epochに3batchを入れて、12epochまで学習したときの画像(ほとんど学習は進んでいない)。
pix2pix