summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--boston.py59
1 files changed, 33 insertions, 26 deletions
diff --git a/boston.py b/boston.py
index 8d8fe21..a93b489 100644
--- a/boston.py
+++ b/boston.py
@@ -17,64 +17,71 @@ x_train, x_test, y_train, y_test = train_test_split(
data, target, train_size=0.9
)
-
with tf.device('/cpu:0'):
# TODO use name scopes
sess = tf.InteractiveSession()
- vecInput = tf.placeholder(tf.float32, [13], name="input")
- numTarget = tf.placeholder(tf.float32, [1], name="target")
+ numElements = tf.placeholder(tf.int32, [1], name="numelements") # = w(matInputs)=h(vecTargets)
+ matInputs = tf.placeholder(tf.float32, [13, None], name="input")
+ vecTargets = tf.placeholder(tf.float32, [None], name="target")
vecBias = tf.Variable(tf.zeros([13]), name="bias")
- # vecWeights is not a true vector, it is turned by 90 degrees
- vecWeights = tf.Variable(tf.zeros([1, 13]), name="weight")
+ vecWeights = tf.Variable(tf.zeros([13]), name="weight")
+
+ scalarElements = tf.reshape(numElements, [])
+
+ # 'vecs' means a (redundant) matrix
+ # tile vecBias and vecWeigths, flatten matInputs
+ vecsInputs = tf.transpose(matInputs)
+ vecsBias = tf.reshape(tf.tile(vecBias, numElements), [13, -1])
+ vecsBias = tf.transpose(vecsBias)
+ # vecsWeights is not a true vector, it is turned by 90 degrees
+ # so that i*w is a matrix
+ vecsWeigths = tf.reshape(tf.tile(vecWeights, numElements), [13, -1])
- # sum((i + b) * w)
- matWeighted = tf.mul(tf.add(vecInput, vecBias), vecWeights)
+ # now we can sum((i + b) * w)
+ matWeighted = tf.mul(tf.add(vecsInputs, vecsBias), vecWeights)
vecNetinput = tf.reduce_sum(matWeighted, 1)
vecLayerOutput = tf.sigmoid(vecNetinput)
# since this is the last layer, vecOutput is a numOutput
- numOutput = tf.reduce_sum(vecLayerOutput) # TODO needed?
+ vecOutput = tf.reduce_sum(vecLayerOutput) # TODO needed?
- numDifference = tf.sub(numOutput, numTarget)
- numMSE = tf.square(numDifference)
- train_step = tf.train.GradientDescentOptimizer(0.01).minimize(numMSE)
+ vecDifference = tf.sub(vecOutput, vecTargets)
+ vecMSE = tf.square(vecDifference)
+ train_step = tf.train.GradientDescentOptimizer(0.01).minimize(tf.reduce_sum(vecMSE))
# summaries
+ # TODO reshape to scalar: reshape(t, [])
summaryBias = tf.histogram_summary("bias", vecBias)
summaryWeights = tf.histogram_summary("weigths", vecWeights)
- summaryDifference = tf.scalar_summary(["difference"], numDifference)
- summaryMSE = tf.scalar_summary(["MSE"], numMSE)
- summaryDifference = tf.scalar_summary(["Mean difference"], numDifference)
+ summaryMSE = tf.scalar_summary("MSE", tf.reduce_sum(vecMSE))
+ summaryDifference = tf.scalar_summary("Mean difference", tf.reduce_mean(vecDifference))
summaries = tf.merge_all_summaries()
writer = tf.train.SummaryWriter("/tmp/boston_logs", sess.graph_def)
# all variables have to be specified here
sess.run(tf.initialize_all_variables())
- for count in range(0, len(x_train)):
+ for count in range(0, int(len(x_train) / 10)):
trainsteps = 100
print("count " + str(count))
for i in range(0, trainsteps): # 100 epochs
- if False: # if i % 10 == 9:
- # TODO mean over test data
- feed = {
- vecInput: x_test[0],
- numTarget: [y_test[0]]
- }
- result = sess.run([summaries, numMSE], feed_dict=feed)
- writer.add_summary(result[0], count * trainsteps + i)
+ #result = sess.run([summaries, numMSE], feed_dict=feed)
+ #writer.add_summary(result[0], count * trainsteps + i)
# TODO run a complete set
+ xt = x_train[count*10:(count+1)*10]
+ xt = [list(i) for i in zip(*xt)] # transpose
result = sess.run([summaries, train_step],
feed_dict={
- vecInput: x_train[count],
- numTarget: [y_train[count]]
+ numElements: [10],
+ matInputs: xt,
+ vecTargets: y_train[count*10:(count+1)*10]
})
if i % 10 == 9:
- writer.add_summary(result[0], int(count * trainsteps + (i - 9) / 10)) # TODO this slows down
+ writer.add_summary(result[0], count * trainsteps + i) # TODO this slows down
print("finished training")