diff options
| -rw-r--r-- | boston.py | 59 |
1 files changed, 33 insertions, 26 deletions
@@ -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") |
