2018-05-07 20:24:47 +00:00
|
|
|
import tensorflow as tf
|
|
|
|
import numpy as np
|
|
|
|
import time
|
|
|
|
|
|
|
|
class Everything:
|
|
|
|
|
|
|
|
def __init__(self):
|
|
|
|
|
|
|
|
self.output_size = 1
|
|
|
|
self.hidden_size = 40
|
|
|
|
self.input_size = 30
|
|
|
|
|
|
|
|
self.input = tf.placeholder('float', [1, self.input_size])
|
|
|
|
|
|
|
|
xavier_init = tf.contrib.layers.xavier_initializer()
|
|
|
|
|
|
|
|
|
|
|
|
W_1 = tf.get_variable("w_1", (self.input_size, self.hidden_size),
|
|
|
|
initializer=xavier_init)
|
|
|
|
W_2 = tf.get_variable("w_2", (self.hidden_size, self.output_size),
|
|
|
|
initializer=xavier_init)
|
|
|
|
|
|
|
|
b_1 = tf.get_variable("b_1", (self.hidden_size,),
|
|
|
|
initializer=tf.zeros_initializer)
|
|
|
|
b_2 = tf.get_variable("b_2", (self.output_size,),
|
|
|
|
initializer=tf.zeros_initializer)
|
|
|
|
|
|
|
|
value_after_input = tf.sigmoid(tf.matmul(self.input, W_1) + b_1, name='hidden_layer')
|
|
|
|
|
|
|
|
self.value = tf.sigmoid(tf.matmul(value_after_input, W_2) + b_2, name='output_layer')
|
|
|
|
|
2018-05-08 22:33:05 +00:00
|
|
|
apply_gradients = []
|
|
|
|
|
|
|
|
|
|
|
|
trainable_vars = tf.trainable_variables()
|
|
|
|
gradients = tf.gradients(self.value, trainable_vars)
|
|
|
|
|
2018-05-09 20:22:12 +00:00
|
|
|
difference_in_values = tf.reshape(tf.subtract(0.9, self.value, name='difference_in_values'), [])
|
2018-05-08 22:33:05 +00:00
|
|
|
|
|
|
|
with tf.variable_scope('apply_gradients'):
|
|
|
|
for gradient, trainable_var in zip(gradients, trainable_vars):
|
2018-05-09 20:22:12 +00:00
|
|
|
backprop_calc = 0.1 * difference_in_values * gradient
|
2018-05-08 22:33:05 +00:00
|
|
|
grad_apply = trainable_var.assign_add(backprop_calc)
|
|
|
|
apply_gradients.append(grad_apply)
|
|
|
|
|
2018-05-09 20:22:12 +00:00
|
|
|
|
|
|
|
self.training_op = tf.group(*apply_gradients, name='training_op')
|
2018-05-08 22:33:05 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
2018-05-07 20:24:47 +00:00
|
|
|
def eval(self):
|
|
|
|
input = np.array([0, 2, 0, 0, 0, 0, -5, 0, -3, 0, 0, 0, 5, -5, 0, 0, 0, 3, 0, 5, 0, 0, 0, 0, -2, 0, 0, 0, 1, 0])
|
|
|
|
start = time.time()
|
|
|
|
sess = tf.Session()
|
|
|
|
sess.run(tf.global_variables_initializer())
|
2018-05-08 22:33:05 +00:00
|
|
|
for i in range(20):
|
2018-05-07 20:24:47 +00:00
|
|
|
val = sess.run(self.value, feed_dict={self.input: input.reshape(1,-1)})
|
|
|
|
print(time.time() - start)
|
|
|
|
print(val)
|
2018-05-09 20:22:12 +00:00
|
|
|
sess.run(self.training_op, feed_dict={self.input: input.reshape(1,-1)})
|
|
|
|
val = sess.run(self.value, feed_dict={self.input: input.reshape(1, -1)})
|
|
|
|
print(val)
|
2018-05-07 20:24:47 +00:00
|
|
|
|
|
|
|
everything = Everything()
|
|
|
|
everything.eval()
|
|
|
|
|
|
|
|
|