padznich

neural_net_train.py

Nov 20th, 2018
352
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.77 KB | None | 0 0
  1. import os
  2.  
  3. import tensorflow as tf
  4. import numpy as np
  5. from plotly.offline import plot
  6. import plotly.graph_objs as ob
  7.  
  8.  
  9. raw_data = open("./data_sets/IPtrain_data_udp.txt").readlines()
  10. raw_labels = open("./data_sets/IPtrain_label_udp.txt").readlines()
  11. trained_path = './model_test'
  12.  
  13.  
  14. x = []
  15. y = []
  16. gra = []
  17. gro = []
  18.  
  19. for _ in raw_data:
  20.     _ = _.split()
  21.     x.append([int(_[0]), int(_[1]), int(_[2]), int(_[3])])
  22.  
  23.  
  24. for _ in raw_labels:
  25.     y.append([0, 1])
  26.  
  27.  
  28. def get_next_batch(batch_size):
  29.  
  30.     _data = raw_data[get_next_batch.counter: get_next_batch.counter + batch_size]
  31.     _label = raw_labels[get_next_batch.counter: get_next_batch.counter + batch_size]
  32.  
  33.     get_next_batch.counter += batch_size
  34.  
  35.     batch_data = []
  36.     batch_label = []
  37.  
  38.     for _ in _data:
  39.         _ = _.split()
  40.         batch_data.append([_[0], _[1], _[2], _[3]])
  41.  
  42.     for _ in _label:
  43.         _ = _.split()
  44.         batch_label.append([_[0], _[1]])
  45.  
  46.     return np.array(batch_data), np.array(batch_label)
  47.  
  48.  
  49. nodesForLayerInput = 4
  50. nodesForLayer1 = 50
  51. nodesForLayer2 = 50
  52. nodesForLayer3 = 50
  53. nodesForLayerOut = 1
  54.  
  55. numberOfClassesOut = 2
  56.  
  57. data = tf.placeholder('float', shape=[None, 4])
  58. label = tf.placeholder('float')
  59.  
  60. layer1 = {
  61.     'w': tf.Variable(tf.random_normal([4, nodesForLayer1])),
  62.     'b': tf.Variable(tf.random_normal([nodesForLayer1]))
  63. }
  64.  
  65. layer2 = {
  66.     'w': tf.Variable(tf.random_normal([nodesForLayer1, nodesForLayer2])),
  67.     'b': tf.Variable(tf.random_normal([nodesForLayer2]))
  68. }
  69.  
  70. layer3 = {
  71.     'w': tf.Variable(tf.random_normal([nodesForLayer2, nodesForLayer3])),
  72.     'b': tf.Variable(tf.random_normal([nodesForLayer3]))
  73. }
  74.  
  75. layerOut = {
  76.     'w': tf.Variable(tf.random_normal([nodesForLayer3, numberOfClassesOut])),
  77.     'b': tf.Variable(tf.random_normal([numberOfClassesOut]))
  78. }
  79.  
  80. saver = tf.train.Saver()
  81.  
  82.  
  83. def graph(_data):
  84.     ans_layer1 = tf.nn.relu(tf.add(tf.matmul(_data, layer1['w']), layer1['b']))
  85.     ans_layer2 = tf.nn.relu(tf.add(tf.matmul(ans_layer1, layer2['w']), layer2['b']))
  86.     ans_layer3 = tf.nn.relu(tf.add(tf.matmul(ans_layer2, layer3['w']), layer3['b']))
  87.  
  88.     ans_layer_out = tf.add(tf.matmul(ans_layer3, layerOut['w']), layerOut['b'])
  89.  
  90.     return ans_layer_out
  91.  
  92.  
  93. def train(_x):
  94.     prediction = graph(_x)
  95.  
  96.     cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(_sentinel=None,
  97.                                                                   logits=prediction,
  98.                                                                   labels=label,
  99.                                                                   dim=-1,
  100.                                                                   name=None))
  101.  
  102.     optimiser = tf.train.AdamOptimizer().minimize(cost)
  103.  
  104.     n_epochs = 20
  105.  
  106.     with tf.Session() as sess:
  107.         sess.run(tf.global_variables_initializer())
  108.  
  109.         for epoch in range(n_epochs):
  110.             epoch_loss = 0
  111.             get_next_batch.counter = 0
  112.  
  113.             for i in range(10000):
  114.                 epoch_data, epoch_label = get_next_batch(100)
  115.                 i, c = sess.run([optimiser, cost], feed_dict={data: epoch_data, label: epoch_label})
  116.                 epoch_loss += c
  117.  
  118.             print("Training Batch: of Epoch: " + str(epoch + 1) + "\tLoss: " + str(epoch_loss))
  119.  
  120.             gra.append(epoch_loss)
  121.  
  122.         save_path = saver.save(sess, os.path.join(trained_path, "model_train.ckpt"))
  123.  
  124.         print("Saved to: ", save_path)
  125.  
  126.         correct = tf.equal(tf.argmax(prediction, 1), tf.argmax(label, 1))
  127.         accuracy = tf.reduce_mean(tf.cast(correct, 'float'))
  128.  
  129.         print("Accuracy ", accuracy.eval({data: x, label: y}))
  130.  
  131.  
  132. train(data)
  133.  
  134. gra1 = list(range(len(gra)))
  135.  
  136. trace0 = ob.Scatter(x=gra1, y=gra, mode='lines+markers')
  137.  
  138. data = [trace0]
  139.  
  140. plot(data, filename="graph.html")
Add Comment
Please, Sign In to add comment