30秒でkerasに入門しましょう

keras-1チュートリアル流し読み

インストール (2017.9.13; GPU環境)

$ tar xvzf cudnn-7.5-linux-x64-v5.0-rc.tgz
$ sudo cp cuda/include/cudnn.h /usr/local/cuda/include
$ sudo cp cuda/lib64/* /usr/local/cuda/lib64/

Anaconda をインストールし、python3.6の環境にて、

$ sudo apt-get install python-numpy python-scipy python-dev python-pip python-nose g++ libopenblas-dev
$ pip install Theano
$ git clone https://github.com/fchollet/keras.git
$ cd keras
$ sudo python setup.py install
$ pip install keras

MNIST が実行できることを確認するには

$ cd examples
$ python mnist_cnn.py

1,2分で実行完了のはず。ダメなら下記のファイルを確認。

/.keras/keras.json

{
    "image_data_format": "channels_first",
    "epsilon": 1e-07,
    "floatx": "float32",
    "backend": "theano"
}

/.theanorc

[global]
floatX = float32
device = gpu0

[lib]
cnmem = .90  # TitanXは1にすると勝手に0.95として扱われたが、GTX970では明示的に小さくしないと、out of memory エラーになる

[nvcc]
flags=-D_FORCE_INLINES

インストール (2017.2.17; GPU環境へのインストール)

Deep Learning関係に沿ってCaffe, chainerをインストール済み

TensorFlowのインストール  GitHub 公式ページ

最新のTensorFlowは、CUDA Toolkit 8.0, cuDNN v5.1 などの環境を推奨している。←公式ページ

TensorFlowだけのためにその環境を作るのは面倒なので、以前の記録を頼りに古いバージョンのTensorFlowをインストール。

$ sudo apt-get update
$ sudo apt-get install python-pip python-dev

GPU版なので

$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.8.0-cp27-none-linux_x86_64.whl

環境変数を設定 (CUDA_HOMEは設定しなくても実行できたが、マニュアルに従えば設定すべきか)

$ export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64"
$ export CUDA_HOME=/usr/local/cuda

下記をエラーなく実行できることを試す

$ python
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> sess.run(hello)
Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> sess.run(a+b)
42
>>>

python libraryのpathを下記コマンドで確認

$ python -c 'import os; import inspect; import tensorflow; print(os.path.dirname(inspect.getfile(tensorflow)))'
/usr/local/lib/python2.7/dist-packages/tensorflow

MNISTが実行できることを確認するには

$ python -m tensorflow.models.image.mnist.convolutional

直接実行するには

$ python /usr/local/lib/python2.7/dist-packages/tensorflow/models/image/mnist/convolutional.py

ほぼ1分で実行完了

(番外編)まっさらなPC環境があり、最新のTensorFlowをインストールしたい場合

まっさらなPC環境があれば、最新で推奨のTensorFlowをインストールできる。その場合もいくつのも方法がある。native pip (ver.2.7)を使う方法はここにある通り、(GitHub上のドキュメントも参考になるかも)

$ sudo apt-get install python-pip python-dev
$ sudo pip uninstall tensorflow
$ pip install tensorflow-gpu

Theano のインストール

公式ページによれば、Ubuntu14.04は簡単で、

$ sudo apt-get install python-numpy python-scipy python-dev python-pip python-nose g++ libopenblas-dev git
$ sudo pip install Theano

Keras のインストール GitHub  公式ドキュメント

githubのREADME.mdに従ってインストール

$ git clone https://github.com/fchollet/keras.git
$ cd keras
$ sudo python setup.py install
$ sudo pip install keras

MNIST が実行できることを確認するには

$ cd examples
$ python mnist_cnn.py

ほぼ1分で実行完了

その他、keras/examples/以下には多数のサンプルあり

インストール (2017.1.22; CPU環境へのインストール)

最短は

$ sudo pip install tensorflow
$ sudo pip install keras

これでダメなら下記を試す

TensorFlow のインストール

TensorFlow公式ダウンロードページによれば、 Cuda Toolkit 8.0 かつ cuDNN v5.1以外のGPUバージョンのインストールは GitHubソースからインストールすべき。 ⇒公式ドキュメント

$ git clone https://github.com/tensorflow/tensorflow

Bazel のインストール

ここに沿って実行

Ubuntu 14.04の場合は下記を実行(Ubuntu 15.10の場合は不要)

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer

残りを実行

$ echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
$ curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -

$ sudo apt-get update && sudo apt-get install bazel
$ sudo apt-get upgrade bazel

動作確認

$ python
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print(sess.run(a + b))
42
>>>

MNISTを実行

学習プログラムmnist_cnn.py(GitHub上)

データローダmnist.py(GitHub上)

ここに説明あり

$ git clone https://github.com/fchollet/keras.git
$ cd keras/examples
$ python mnist_cnn.py

 ~/.keras/keras.json のbackendを修正

{
   "image_dim_ordering": "th",
   "epsilon": 1e-07,
   "floatx": "float32",
   "backend": "tensorflow"   # or "theano"
}

下記をmnist_cnn.py に追加すると学習パラメータを保存できる。

print('save the architecture of a model')
json_string = model.to_json()
open('cnn_model.json', 'w').write(json_string)
yaml_string = model.to_yaml()
open('cnn_model.yaml', 'w').write(yaml_string)
print('save weights')
model.save_weights('cnn_model_weights.hdf5')
$ sudo pip install h5py

が必要

Keras でお試し

『実装 ディープラーニング』に沿って進める

ここから

$ wget http://www.ohmsha.co.jp/data/link/978-4-274-21999-3/darknet_test.tar.gz
$ wget http://www.ohmsha.co.jp/data/link/978-4-274-21999-3/darknet_train.tar.gz
$ wget http://www.ohmsha.co.jp/data/link/978-4-274-21999-3/extraction.conv.weights
$ wget http://www.ohmsha.co.jp/data/link/978-4-274-21999-3/projects.tar.gz
$ wget http://www.ohmsha.co.jp/data/link/978-4-274-21999-3/yolo.weights

$ tar xvzf projects.tar.gz
$ tar xvzf darknet_test.tar.gz -C projects/5-1/
$ tar xvzf darknet_train.tar.gz -C projects/5-1/

その他データファイルなど

$ wget https://www.vision.caltech.edu/Image_Datasets/Caltech101/101_ObjectCategories.tar.gz
$ wget https://d2j0dndfm35trm.cloudfront.net/resnet-152.t7

vgg16_weights.h5 は真面目にブラウザからダウンロード

OpenCVがまだインストールされていないならインストール

$ sudo apt-get install libopencv-dev

データを準備

$ mkdir data
$ tar xzf 101_ObjectCategories.tar.gz -C data/
$ cd projects/4-2
$ python migration_data_caltech101.py

data_augmentation.py を修正

29:    (削除)
30:    return warp(img, tf, output_shape=output_shape, mode=mode, order=order)
$ python data_augmentation.py

所要約1分40秒

いよいよ学習

$ cd ../4-3

TensorFlowで実行するには、~/.keras/keras.json が

{
    "image_dim_ordering": "th",
    "epsilon": 1e-07,
    "floatx": "float32",
    "backend": "tensorflow"
}

となっていることを確認の上(詳細は公式ページ

$ python 9_Layer_CNN.py train

もしくは

$ KERAS_BACKEND=tensorflow python 9_Layer_CNN.py train

所要約83分

Theanoで実行するには、~/.keras/keras.json が

{
    "image_dim_ordering": "th",
    "epsilon": 1e-07,
    "floatx": "float32",
    "backend": "theano"
}

となっていることを確認の上

$ export THEANO_FLAGS='mode=FAST_RUN,device=gpu0,floatX=float32,optimizer_excluding=conv_dnn'
$ python 9_Layer_CNN.py train

もしくは

$ KERAS_BACKEND=theano THEANO_FLAGS='mode=FAST_RUN,device=gpu0,floatX=float32,optimizer_excluding=conv_dnn' python 9_Layer_CNN.py train

所要約34分 (cuDNN 使わず; 結果に再現性あり)

$ KERAS_BACKEND=theano THEANO_FLAGS='mode=FAST_RUN,device=gpu0,floatX=float32' python 9_Layer_CNN.py train

所要約27分 (cuDNN使用; 結果に再現性なし)

$ KERAS_BACKEND=theano THEANO_FLAGS='mode=FAST_RUN,floatX=float32' python 9_Layer_CNN.py train

所要推定丸1日 (GPU使わず)

$ KERAS_BACKEND=theano THEANO_FLAGS='device=gpu0' python 9_Layer_CNN.py train

所要約27分 (cuDNN使用; 結果に再現性なし)

結果は ./cache/ 以下

device=gpu0は今後推奨されない指定法らしい← 詳細はここ

Theanoの設定ファイル ~/.theanorc

GPUが使える場合、下記のような ~/.theanorc を用意する方法もある

[global]
floatX = float32
device = gpu

[lib]
cnmem = 1

[nvcc]
flags=-D_FORCE_INLINES

参考)

https://github.com/yukoba/CnnJapaneseCharacter

TSUBAME2.0でtheanoをどうにか動かしたお話

公式ドキュメントによれば、大きく3種類の方法がある

推測

TensorFlowで実行するには

$ KERAS_BACKEND=tensorflow python 9_Layer_CNN.py test 32 27

が、エラー終了。メモリ不足とのこと。(TensorFlowで走らせるには何かコツがあるのだろう)

Theanoで実行するには

$ KERAS_BACKEND=theano THEANO_FLAGS='device=gpu0' python 9_Layer_CNN.py test 32 27

所要3分27秒 (cuDNN使用; 結果に再現性なし)

32, 27は学習時に成績の良かったエポック番号を指定

結果は ./subm/ 以下

Keras でVGG16 参考)VGG16 model for Keras

前節の「データを準備」までを実行

学習

$ cd projects/4-4
$ ln -s ../../vgg16_weights.h5 .

VGG_16.py を修正

161:   f = h5py.File('vgg16_weights.h5')

TensorFlowで実行

$ KERAS_BACKEND=tensorflow python VGG_16.py train

所要約50分 (cuDNN使用; 結果に再現性なし)

Theanoで実行

$ KERAS_BACKEND=theano THEANO_FLAGS='device=gpu0' python VGG_16.py train

所要約25分 (cuDNN使用; 結果に再現性なし)

結果は ./cache/ 以下

推測

TensorFlowで実行

$ KERAS_BACKEND=tensorflow python VGG_16.py test 10 4

10, 4は学習時に成績の良かったエポック番号を指定

だがエラー終了。メモリ不足とのこと。(TensorFlowで走らせるには何かコツがあるのだろう)

Theanoで実行

$ KERAS_BACKEND=theano THEANO_FLAGS='device=gpu0' python VGG_16.py test 10 4

10, 4は学習時に成績の良かったエポック番号を指定

所要約8分 (cuDNN使用; 結果に再現性なし)

結果は ./subm/ 以下

Keras を使うときは Theano と共に。

Keras で "Deep Sea" 方式の精度向上

Deep Sea について

ここここにドキュメントあり

GitHub

記事

コンペ(National Data Science Bowl)

準備

前節の「データを準備」までを実行

Holdout 2回 x 3モデル

上述のような ~/.theanorcを用意

$ cd projects/4-6
$ KERAS_BACKEND=theano python multiple_model.py train 1
$ KERAS_BACKEND=theano python multiple_model.py train 2
$ KERAS_BACKEND=theano python multiple_model.py train 3

所要約14分 x 3

$ KERAS_BACKEND=theano python multiple_model.py test 1 32 27
$ KERAS_BACKEND=theano python multiple_model.py test 2 29 33
$ KERAS_BACKEND=theano python multiple_model.py test 3 32 40

最後の2つの数字は val_acc最大のエポック番号

所要約3分 x 3

$ python average_3models.py normal

検証時の正解率は、1693 / 2079 = 81.43% (cuDNNを使っているので再現性なし)

train時、学習用1305 + 検証用1300 のサンプルを使用 (入力: ../data/Caltech-101/{train,valid})

test時、2079サンプルについて 3モデル分の推測⇒これを集計して評価 (出力: subm/result_multi_[1-3]_[0-5].csv)

test時、同時に、1300 x 2 holdout = 2600 の検証用データについても、3モデルの推測を集計(平均) (出力: subm/valid_multi_[1-3].csv)

Stacked Generalization

$ KERAS_BACKEND=theano python make_pseudo_label.py

2層のNNによる学習と推測を実行。2層(しかも内部ノード数 8+6個)なので早い

subm/pseudo_label_[0-5].csv を集計すると、正解率は 1690 / 2079 = 81.29% と低下

(本来検証用の)2600のサンプルを用いて学習 (入力: subm/valid_average.csv)

評価には2079のサンプルを使用。このとき同時に抽出も行う。(入力: subm/result_average_[0-5].csv; 出力: subm/pseudo_label_[0-5].csv)

Self Training

$ KERAS_BACKEND=theano python pseudo_model.py train 1
$ KERAS_BACKEND=theano python pseudo_model.py train 2
$ KERAS_BACKEND=theano python pseudo_model.py train 3

所要約70分 x 3

$ KERAS_BACKEND=theano python pseudo_model.py test 1 37 38
$ KERAS_BACKEND=theano python pseudo_model.py test 2 37 37
$ KERAS_BACKEND=theano python pseudo_model.py test 3 38 40

所要約3分 x 3

$ python average_3models.py pseudo

検証時の正解率は、1816 / 2079 = 87.35%

train時、学習用1305 + 6055、検証用1300 のサンプルを使用 (1305 と 6055は、それぞれ hard-target と soft-target と呼ぶ)

1305は元の学習用データ。6055は、集計した 2079サンプルから「一定の基準」で抽出した 1211サンプルをデータ拡大で5倍にしたもの(1211 x 5 = 6055) (入力: subm/pseudo_label_[0-5].csv)

test時、2079サンプルについて 3モデル分の推測⇒これを集計して評価

Self Training では、Stacked Generalization で学習した2層NNを使っていないぽい。そもそも2層NNは保存すらしていないぽい。

「一定の基準」は"Deep Sea"とは違うらしい。ここでは「80%以上の確率で特定のクラスに分類していること」

要は、(合っているかどうかはともかく、)はっきりした推測 ⇒ まあ、合っているだろうと仮定して訓練データに追加

KerasでResNet GitHub

cifar10のサンプルあり

$ git clone https://github.com/raghakot/keras-resnet.git
$ cd keras-resnet
$ KERAS_BACKEND=theano THEANO_FLAGS='mode=FAST_RUN,device=gpu0,floatX=float32' python cifar10.py

しかし、cnDNN Batch Normalization を使うには cuDNN V5 が必要とのエラーで終了

optimizer_excluding=conv_dnn を付けても改善なし

CPUモードなら動作する(所要おそらく丸1日前後)

cuDNN V5 で試す

$ tar xvzf cudnn-7.5-linux-x64-v5.0-rc.tgz
$ sudo cp cuda/include/cudnn.h /usr/local/cuda/include
$ sudo cp cuda/lib64/* /usr/local/cuda/lib64/

$ KERAS_BACKEND=theano THEANO_FLAGS='mode=FAST_RUN,device=gpu0,floatX=float32' python cifar10.py

所要約146分

結果は resnet18_cifar10.csv

val_acc は最大 86.98

  • cifar10.load_data()を実行して ダウンロードしたcifar10のデータは ~/.keras/datasets/以下にキャッシュされる
  • ResNet-34 を実行するには cifar10.pyを修正
    20: csv_logger = CSVLogger('resnet34_cifar10.csv')
    49: model = resnet.ResnetBuilder.build_resnet_34((img_channels, img_rows, img_cols), nb_classes)
$ KERAS_BACKEND=theano THEANO_FLAGS='mode=FAST_RUN,device=gpu0,floatX=float32' python cifar10.py

所要約328分(約5時間半)

結果は resnet18_cifar34.csv

val_acc は最大 87.13 で、さほど改善していない

  • 同様に、ResNet-50の場合、
    $ KERAS_BACKEND=theano THEANO_FLAGS='mode=FAST_RUN,device=gpu0,floatX=float32' python cifar10.py
    所要約417分(約7時間)

val_acc は最大 87.06 で、改善していない

  • 同様に、ResNet-101の場合、
    $ KERAS_BACKEND=theano THEANO_FLAGS='mode=FAST_RUN,device=gpu0,floatX=float32' python cifar10.py
    所要約1003分(16時間43分)

val_acc は最大 87.27

  • 同様に、ResNet-152の場合、
    $ KERAS_BACKEND=theano THEANO_FLAGS='mode=FAST_RUN,device=gpu0,floatX=float32' python cifar10.py
    所要約1832分(約30時間)

val_acc は最大 87.56

Wide Residual Networks (WRN) GitHub

https://github.com/raghakot/keras-resnet/blob/master/resnet.py#L212 をk=4倍してみた

  • ResNet-18 の場合、val_accは最大87.49(所要約136分)
  • ResNet-34 の場合、val_accは最大85.68(所要約41時間40分)
  • ResNet-50 の場合、val_accは最大86.47(所要約4日と1時間)

⇒微妙。もっと真面目に論文を読むべき

ひらがなの学習

CnnJapaneseCharacterのGitHub

$ git clone https://github.com/yukoba/CnnJapaneseCharacter.git
$ cd CnnJapaneseCharacter/src
$ sudo pip install scikit-learn

learn.py を修正

49: def my_init(shape, name=None, dim_ordering=None):

上述の ~/.theanorcを用意

$ KERAS_BACKEND=theano python learn.py

所要約13分

ひらがな72文字の学習とのことだが、正確には「を」を除いた45文字+濁音・半濁音25文字+「平」「開」の72文字

Keras で FCN

GitHubとその解説記事

FCNのネットワーク定義は ここ

画像の解像度は固定

ここの議論の結論が気になる

Keras で画像キャプション生成

Keras deep learning for image caption retrieval

公式ドキュメントに学習用モデルのサンプルあり

テスト時にはTimeDistributedDenseを使う

転移学習

Kerasで学ぶ転移学習 ← 転移学習に限らず、プログラミングの勉強になる

転移学習の注意点

building powerful image classification models using very little data

によれば、

  • fine-tuning前に適当な初期値を入れるべきではない
  • 学習するのは最後の方の畳込み層のみ(過学習の回避のため)
  • 学習率は小さく、SGDを採用すべき

Kaggleから train.zip と test1.zip をダウンロード(アカウント登録必要)

$ mv train.zip test1.zip ~/Downloads/data/dogs-vs-cats
$ cd ~/Downloads/data/dogs-vs-cats
$ unzip train.zip
$ cd
$ mkdir fchollet-sample
$ cd fchollet-sample
$ mkdir data
$ mkdir data/train
$ mkdir data/train/cats
$ mkdir data/train/dogs
$ mkdir data/validation
$ mkdir data/validation/cats
$ mkdir data/validation/dogs
$ i=0; while [ $i -lt 1000 ]; do f=`printf "/home/nagai/Downloads/data/dogs-vs-cats/train/cat.%d.jpg" $i`; g=`printf "data/train/cats/cat%03d.jpg" $i`; cp -p $f $g; i=`expr $i + 1`;  done
$ i=0; while [ $i -lt 1000 ]; do f=`printf "/home/nagai/Downloads/data/dogs-vs-cats/train/dog.%d.jpg" $i`; g=`printf "data/train/dogs/dog%03d.jpg" $i`; cp -p $f $g; i=`expr $i + 1`;  done
$ i=1000; while [ $i -lt 1400 ]; do f=`printf "/home/nagai/Downloads/data/dogs-vs-cats/train/dog.%d.jpg" $i`; j=`expr $i - 1000`; g=`printf "data/validation/dogs/dog%03d.jpg" $j`; cp -p $f $g; i=`expr $i + 1`;  done
$ i=1000; while [ $i -lt 1400 ]; do f=`printf "/home/nagai/Downloads/data/dogs-vs-cats/train/cat.%d.jpg" $i`; j=`expr $i - 1000`; g=`printf "data/validation/cats/cat%03d.jpg" $j`; cp -p $f $g; i=`expr $i + 1`;  done
$ wget https://gist.github.com/fchollet/0830affa1f7f19fd47b06d4cf89ed44d/raw/47d3e33764c902ed33a64f35f5f68d911de05d8d/classifier_from_little_data_script_1.py
$ wget https://gist.github.com/fchollet/f35fbc80e066a49d65f1688a7e99f069/raw/daf7ca7a20e18ba0e07a34bfb8774762711ba556/classifier_from_little_data_script_2.py
$ wget https://gist.github.com/fchollet/7eb39b44eb9e16e59632d25fb3119975/raw/b432d08a104db1256359d818777abb2730abb539/classifier_from_little_data_script_3.py

これらは Keras 1 用のコードなので、そのままでは実行できない

classifier_from_little_data_script_1.py を修正

41: import keras.layers import Convolution2D, MaxPooling2D

56: if K.image_dim_ordering == 'th':

62: model.add(Convolution2D(32, 3, 3, input_shape=input_shape))

66: model.add(Convolution2D(32, 3, 3))

70: model.add(Convolution2D(32, 3, 3))

108: model.fit_generator(
109:     train_generator,
110:     samples_per_epoch=nb_train_samples,
111:     nb_epoch=epochs,
112:     validation_data=validation_generator,
113:     nb_val_samples=nb_validation_samples)
$ KERAS_BACKEND=theano python classifier_from_little_data_script_1.py

実行時間は8分程度

import cv2
import numpy as np

i=0
for batchX, batchY in train_generator:
    gen = batchX[0] * 255
    gen = gen.transpose(1,2,0) # shape (3,height,width) => (height,width,3)
    gen = gen[:, :, ::-1]      # RGB => BGR
    cv2.imwrite('{:04d}.jpg'.format(i), gen)
    i += 1
    if i > 20:
        break

また、 ImageDataGenerator.flow_from_directory( ) の引数 target_sizeは(height, width)が正しい気がする

Keras で GoogLeNet

GoogLeNet in Keras

実際のコード

Caffe から Keras への移植方法も懇切丁寧に解説

レイヤーの重みなど

畳み込みレイヤー

(Pdb) model.layers[0].get_weights()[0].shape
(3, 3, 1, 32)
(Pdb) model.layers[0].get_weights()[1].shape
(32,)

全結レイヤー

(Pdb) model.layers[-3].get_weights()[0].shape
(512, 256)
(Pdb) model.layers[-3].get_weights()[1].shape
(256,)

入出力のshape

(Pdb) model.layers[0].input_shape
(None, 1, 32, 32)
(Pdb) model.layers[-1].output_shape
(None, 256)
(Pdb) model.layers[0].get_config()
{'name': 'conv2d_1', 'trainable': True, ...}

詳細は)https://keras.io/ja/layers/about-keras-layers/

トラブルシューティング

CVM is not defined とエラーメッセージが出る時

$ pip uninstall theano
$ pip uninstall keras
$ rm -rf ~/.theano
$ pip install theano
$ pip install keras

Keras 2.1.0 で fit_generator() を使ったらエラーになった

$ pip uninstall keras
$ pip install keras==2.0.8

小技

Layerの自作

Kerasのノウハウ覚え書き

cross validation

Kerasのノウハウ覚え書き

学習率を減らす

Kerasのノウハウ覚え書き

https://github.com/raghakot/keras-resnet/blob/master/cifar10.pyでは、ReduceLROnPlateau() を使っている。こっちの方が賢そう。

callbacks.append(ReduceLROnPlateau(factor=np.sqrt(0.1), cooldown=0, patience=5, min_lr=0.5e-6))

懇切丁寧な説明

https://machinelearningmastery.com/using-learning-rate-schedules-deep-learning-models-python-keras/

複数のlayerのweightを共有するときはContainerを使う

Kerasでちょっと難しいModelやTrainingを実装するときのTips

Keras 2 で merge を使いたいとき

基本は

from keras.layers import add
m = add([init, x])

from keras.layers import merge
m = merge.Add([init, x])

他にも、multiply, average, maximum, concatenate などがある。前者は関数インタフェースとのこと。

公式サンプルは https://github.com/fchollet/keras/blob/master/tests/keras/layers/merge_test.py

RNN, stateful LSTM

Understanding Stateful LSTM Recurrent Neural Networks in Python with Keras ← 勉強になった

stateful LSTM in Keras

公式サンプル

使えそうな実装

seq2seq, seq2seq+attention

https://github.com/farizrahman4u/seq2seq

手軽に使える

$ git clone https://www.github.com/datalogai/recurrentshop.git
$ cd recurrentshop
$ python setup.py install

$ git clone https://github.com/farizrahman4u/seq2seq.git
import seq2seq
from seq2seq.models import SimpleSeq2Seq

model = SimpleSeq2Seq(input_dim=5, hidden_dim=10, output_length=8, 
output_dim=8)
model.compile(loss='mse', optimizer='rmsprop')

seq2seq+attention

http://qiita.com/halhorn/items/dc10596942ef4be54af5

word2vecの亜種

https://github.com/ryankiros/skip-thoughts (skip-thoughts)

テキスト生成

http://machinelearningmastery.com/text-generation-lstm-recurrent-neural-networks-python-keras/

囲碁

Keras/TensorFlowでDNNな囲碁の評価関数を作ってみる

フォーラムの類い

https://groups.google.com/forum/#!forum/keras-users


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-11-15 (水) 09:09:20 (7d)