Guest User

Untitled

a guest
Jan 20th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.40 KB | None | 0 0
  1. import tensorflow as tf
  2.  
  3. vocabulary_size = 10000
  4. embedding_size = 64
  5. rnn_size = 64
  6. batch_size = 512
  7.  
  8. # download dataset
  9. (train_data, train_labels), (test_data, test_labels) = tf.keras.datasets.imdb.load_data(num_words=vocabulary_size)
  10.  
  11. # add zero padding to our data
  12. train_data = tf.keras.preprocessing.sequence.pad_sequences(train_data, maxlen=256)
  13. test_data = tf.keras.preprocessing.sequence.pad_sequences(test_data, maxlen=256)
  14.  
  15. # convert our np.data to tf.data.Dataset and create two iterators for test & train
  16. training_dataset = tf.data.Dataset.from_tensor_slices((train_data, train_labels)).repeat(5).shuffle(1024).batch(
  17. batch_size)
  18. test_dataset = tf.data.Dataset.from_tensor_slices((test_data, test_labels)).repeat(1).batch(batch_size)
  19.  
  20. iterator = tf.data.Iterator.from_structure(training_dataset.output_types,
  21. training_dataset.output_shapes)
  22.  
  23. train_init_op = iterator.make_initializer(training_dataset)
  24. test_init_op = iterator.make_initializer(test_dataset)
  25.  
  26. # Input data
  27. x, y = iterator.get_next()
  28.  
  29. # it is a counter
  30. global_step = tf.Variable(0, trainable=False)
  31.  
  32. # embedding matrix
  33. embeddings_matrix = tf.get_variable("embedding", [vocabulary_size, embedding_size])
  34. embed = tf.nn.embedding_lookup(embeddings_matrix, x) # batch x seq x embed_size
  35.  
  36. # our RNN variables
  37. Wx = tf.get_variable(name='Wx', shape=[embedding_size, rnn_size])
  38. Wh = tf.get_variable(name='Wh', shape=[rnn_size, rnn_size])
  39. bias_rnn = tf.get_variable(name='brnn', initializer=tf.zeros([rnn_size]))
  40.  
  41.  
  42. # single step in RNN
  43. def rnn_step(prev_hidden_state, x):
  44. return tf.tanh(tf.matmul(x, Wx) + tf.matmul(prev_hidden_state, Wh) + bias_rnn)
  45.  
  46. # our unroll function
  47. # notice that our inputs should be transpose
  48. hidden_states = tf.scan(fn=rnn_step,
  49. elems=tf.transpose(embed, perm=[1, 0, 2]),
  50. initializer=tf.zeros([batch_size, rnn_size]))
  51.  
  52. # covert to previous shape
  53. outputs = tf.transpose(hidden_states, perm=[1, 0, 2])
  54.  
  55. # extract last hidden
  56. last_rnn_output = outputs[:, -1, :]
  57.  
  58. # dense layers variables
  59. Wd1 = tf.get_variable(name='dense1', shape=(rnn_size, 16))
  60. Wd2 = tf.get_variable(name='dense2', shape=(rnn_size, 2))
  61.  
  62. dense1 = tf.nn.relu(tf.matmul(last_rnn_output, Wd1))
  63. logit = tf.matmul(last_rnn_output, Wd2)
  64. pred = tf.nn.softmax(logit)
  65.  
  66. # calculate accuracy
  67. correct_pred = tf.equal(tf.argmax(pred, 1), y)
  68. accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))
  69.  
  70. # define optimizer, cost, and training step
  71. cost = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(labels=y, logits=logit))
  72. optimizer = tf.train.AdamOptimizer()
  73. train_step = optimizer.minimize(cost, global_step=global_step)
  74.  
  75. # training and testing loop
  76. with tf.Session() as sess:
  77. sess.run(tf.global_variables_initializer())
  78. sess.run(train_init_op)
  79.  
  80. while True:
  81. try:
  82. _, step, c, acc = sess.run([train_step, global_step, cost, accuracy])
  83. if step % 50 == 0:
  84. print("Iter " + str(step) +
  85. ", batch loss {:.6f}".format(c) +
  86. ", batch Accuracy= {:.5f}".format(acc))
  87. except tf.errors.OutOfRangeError:
  88. print('training is finished...')
  89. break
  90.  
  91. step = 0
  92. acc = 0
  93. sess.run(test_init_op)
  94. while True:
  95. try:
  96. step = step + 1
  97. acc = acc + sess.run(accuracy)
  98. except tf.errors.OutOfRangeError:
  99. break
  100. print('final accuracy', acc / step)
Add Comment
Please, Sign In to add comment