内省するTensorFlow
-
Upload
yoshiyuki-kakihara -
Category
Engineering
-
view
11.564 -
download
4
Transcript of 内省するTensorFlow
内省する TensorFlow2015.12.11 @ DeNA
自己紹介
柿原祥之 @1664riffsジョイズ株式会社 代表• スタートアップ(調達済)
• ロールプレイ英会話の対話、評価、指導をするアプリをつくってます
• むかしは
• データ解析基盤開発@大英気象庁
• 車載機器ソフトウェア開発、技術渉外@ソニー
内省1.自分自身の心のはたらきや状態をかえりみること。
2.「内観(ないかん)」に同じ。( 三省堂大辞林より )
TFのソースをTFで予測しようニューラルネット言語モデルをつくる
Recurrent Neural Network
• 可変長の入力系を扱える
• 時系列データに向いている
• 言語
• 音
• センサー
• 今回は言語モデル生成に活用
• ある文字の配列の次に来る文字を予測する
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万行程度
学習データ準備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ほどになります
学習データ準備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)
モデルの設定 ※コードは端折ってます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層でやっています
学習に使うメインループ# セッション(実行マネージャ)貼る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)
結果(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らしいコードが出ました
感想1.やっぱり計算が重い(30min/epoch)
2.流石にコンパイルは通りませんでした
3.豊富に用意されている計算ユニットを使えば数値計算のコードがほぼゼロ
4.個人的にはChainerの方が直感的で使いやすい
5.分散処理で俺TUEEしたりモバイル向けのモデル出力を試したい
ところで…
機械学習や言語処理を勉強してみてはいるが面白いプロジェクトがなかなかない転職までは思い切れないが力試しをしてみたいそんな方にお知らせです
学生・社会人インターン募集中• 渋谷区東1丁目
• 週~10h 程度、給料でます
• Slack, GitHub, Trello, Python 3.4, Django 1.8
• 海外在住の英語教育専門家ふくめ、9人体制で開発
• バイリンガル環境(日本語・英語)
インターンプロジェクト(候補)
1.英会話文の難易度推定
2.英会話文の言い換え候補推定
3.音声認識のドメイン特化辞書の自動生成
ほか応相談
話を聞いてみたいという方はぜひこのツイートにfavしてくださいこちらから連絡差し上げます
h"ps://twi"er.com/1664riffs/status/672312408577212416
ありがとうございました!