기본 RNN 설계
- 입, 출력을 설계한다.
실행 코드 및 결과
import tensorflow as tf import random import numpy as np from tensorflow.contrib import rnn import pprint import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' idx2char = ['h', 'i', 'e', 'l', 'o'] # Teach hello: hihell -> ihello x_data = [[0, 1, 0, 2, 3, 3]] # hihell x_one_hot = [[[1, 0, 0, 0, 0], # h 0 [0, 1, 0, 0, 0], # i 1 [1, 0, 0, 0, 0], # h 0 [0, 0, 1, 0, 0], # e 2 [0, 0, 0, 1, 0], # l 3 [0, 0, 0, 1, 0]]] # l 3 y_data = [[1, 0, 2, 3, 3, 4]] # ihello num_classes = 5 input_dim = 5 # one-hot size hidden_size = 5 # output from the LSTM. 5 to directly predict one-hot batch_size = 1 # one sentence sequence_length = 6 # |ihello| == 6 learning_rate = 0.1 X = tf.placeholder( tf.float32, [None, sequence_length, input_dim]) # X one-hot Y = tf.placeholder(tf.int32, [None, sequence_length]) # Y label cell = tf.contrib.rnn.BasicLSTMCell(num_units=hidden_size, state_is_tuple=True) initial_state = cell.zero_state(batch_size, tf.float32) outputs, _states = tf.nn.dynamic_rnn( cell, X, initial_state=initial_state, dtype=tf.float32) # FC layer X_for_fc = tf.reshape(outputs, [-1, hidden_size]) # fc_w = tf.get_variable("fc_w", [hidden_size, num_classes]) # fc_b = tf.get_variable("fc_b", [num_classes]) # outputs = tf.matmul(X_for_fc, fc_w) + fc_b outputs = tf.contrib.layers.fully_connected( inputs=X_for_fc, num_outputs=num_classes, activation_fn=None) # reshape out for sequence_loss outputs = tf.reshape(outputs, [batch_size, sequence_length, num_classes]) weights = tf.ones([batch_size, sequence_length]) sequence_loss = tf.contrib.seq2seq.sequence_loss( logits=outputs, targets=Y, weights=weights) loss = tf.reduce_mean(sequence_loss) train = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(loss) prediction = tf.argmax(outputs, axis=2) with tf.Session() as sess: sess.run(tf.global_variables_initializer()) for i in range(50): l, _ = sess.run([loss, train], feed_dict={X: x_one_hot, Y: y_data}) result = sess.run(prediction, feed_dict={X: x_one_hot}) print(i, "loss:", l, "prediction: ", result, "true Y: ", y_data) # print char using dic result_str = [idx2char[c] for c in np.squeeze(result)] print("\tPrediction str: ", ''.join(result_str))
'IT > 머신러닝' 카테고리의 다른 글
[section_12_lab] Dynamic RNN & RNN with Time Series Data (0) | 2018.06.01 |
---|---|
[section_12_lab] Long Sequence RNN (by Stacked RNN + Softmax layer) (0) | 2018.06.01 |
[section_12_lab] RNN – Basic Input Output (0) | 2018.06.01 |
[section_11_lab] Class, tf.layers, Ensemble (MNIST 99.5%) (0) | 2018.06.01 |
[section_11_lab] TensorFlow로 구현하자 (MNIST 99%) (0) | 2018.06.01 |