内省するTensorFlow

17
内省する TensorFlow 2015.12.11 @ DeNA

Transcript of 内省するTensorFlow

Page 1: 内省するTensorFlow

内省する TensorFlow2015.12.11 @ DeNA

Page 2: 内省するTensorFlow

自己紹介

柿原祥之 @1664riffsジョイズ株式会社 代表• スタートアップ(調達済)

• ロールプレイ英会話の対話、評価、指導をするアプリをつくってます

• むかしは

• データ解析基盤開発@大英気象庁

• 車載機器ソフトウェア開発、技術渉外@ソニー

Page 3: 内省するTensorFlow

内省1.自分自身の心のはたらきや状態をかえりみること。

2.「内観(ないかん)」に同じ。( 三省堂大辞林より )

Page 4: 内省するTensorFlow

TFのソースをTFで予測しようニューラルネット言語モデルをつくる

Page 5: 内省するTensorFlow

Recurrent Neural Network

• 可変長の入力系を扱える

• 時系列データに向いている

• 言語

• 音

• センサー

• 今回は言語モデル生成に活用

• ある文字の配列の次に来る文字を予測する

Page 6: 内省するTensorFlow

TensorFlow の内訳SLOC Directory SLOC-by-Language (Sorted)148740 tensorflow cpp=105165,python=42584,java=850,sh=14182875 third_party cpp=43163,ansic=39427,python=167,sh=118

Totals grouped by language (dominant language first):cpp: 148328 (63.98%)python: 42751 (18.44%)ansic: 39427 (17.01%)java: 850 (0.37%)sh: 472 (0.20%)

• C, CPP で19万行程度

Page 7: 内省するTensorFlow

学習データ準備def pickup_files(git_root, extensions): for (dirpath, dirnames, filenames) in os.walk(git_root): for fn in filenames: for ext in extensions: if fn.endswith(ext): yield os.path.join(dirpath, fn)

def writeout(git_root, extensions, out_file): for filename in pickup_files(git_root, extensions): with open(filename, 'r') as f: out.write(f.read() + '\n\n\n') print('{} read and written out.'.format(filename))

10MBほどになります

Page 8: 内省するTensorFlow

学習データ準備2# ソースコードなのでtokenize等せず文字ベースで扱うwith open(input_file, "r") as f: data = f.read()counter = collections.Counter(data)

## 省略 ##

# Indexingself.vocab = dict(zip(self.chars, range(len(self.chars))))

# テンソル化してディスクに保存self.tensor = np.array(map(self.vocab.get, data))np.save(tensor_file, self.tensor)

Page 9: 内省するTensorFlow

モデルの設定 ※コードは端折ってますfrom tensorflow.models.rnn import rnn_cellcell = rnn_cell.BasicLSTMCell(args.rnn_size)cell = rnn_cell.MultiRNNCell([cell] * args.num_layers)

#### 省略 ####

loss = seq2seq.sequence_loss_by_example([logits], [tf.reshape(targets, [-1])], [tf.ones([args.batch_size * args.seq_length])], args.vocab_size)cost = tf.reduce_sum(loss) / args.batch_size / args.seq_length

#### 省略 ####

• RNN/LSTMのモデル含め同梱物が多く楽

• ちなみに今回は128x2層でやっています

Page 10: 内省するTensorFlow

学習に使うメインループ# セッション(実行マネージャ)貼るwith tf.Session() as sess: tf.initialize_all_variables().run() for e in xrange(args.num_epochs): sess.run(tf.assign(model.lr, args.learning_rate * (args.decay_rate ** e))) data_loader.reset_batch_pointer() state = model.initial_state.eval() for b in xrange(data_loader.num_batches): # データ取ってくる x, y = data_loader.next_batch() feed = {model.input_data: x, model.targets: y, model.initial_state: state} # 定義済のオペレーションを走らせる train_loss, state, _ = sess.run([model.cost, model.final_state, model.train_op], feed)

Page 11: 内省するTensorFlow

結果(root)tensorflow-rnn > python predict.py

Status NALS: eifent_attrees: { return actual(v, sizeof(), right >> 1024 > 0; }

// the declares retval. int llasis_module = truth;};

template <typename T>struct Split<CoeffReturnType> blockmd(const uint64_t* blockAllocation) const { uint32 must b = (_(2)).data(), alpha); return h_i + 1.value;// hol[FNSTMTH allowed stream_i != 0) { src_t s30 = 6; Input(e_.extrage().implementation(1)); // 'Extras(stream, dst_loadhan), new GraphDef(end, a|0))`. tensorflow::output_solve_retvalFunc(internal::array_int_tr, const string& name, uint64 side) const &StreamExecutor : Collection* get_random the const Eigen*/_mask_op.clee.

ちゃんとCらしいコードが出ました

Page 12: 内省するTensorFlow

感想1.やっぱり計算が重い(30min/epoch)

2.流石にコンパイルは通りませんでした

3.豊富に用意されている計算ユニットを使えば数値計算のコードがほぼゼロ

4.個人的にはChainerの方が直感的で使いやすい

5.分散処理で俺TUEEしたりモバイル向けのモデル出力を試したい

Page 13: 内省するTensorFlow

ところで…

機械学習や言語処理を勉強してみてはいるが面白いプロジェクトがなかなかない転職までは思い切れないが力試しをしてみたいそんな方にお知らせです

Page 14: 内省するTensorFlow

学生・社会人インターン募集中• 渋谷区東1丁目

• 週~10h 程度、給料でます

• Slack, GitHub, Trello, Python 3.4, Django 1.8

• 海外在住の英語教育専門家ふくめ、9人体制で開発

• バイリンガル環境(日本語・英語)

Page 15: 内省するTensorFlow

インターンプロジェクト(候補)

1.英会話文の難易度推定

2.英会話文の言い換え候補推定

3.音声認識のドメイン特化辞書の自動生成

ほか応相談

Page 16: 内省するTensorFlow

話を聞いてみたいという方はぜひこのツイートにfavしてくださいこちらから連絡差し上げます

h"ps://twi"er.com/1664riffs/status/672312408577212416

Page 17: 内省するTensorFlow

ありがとうございました!