Rounding Error at a python neural network made by Keras

322 views Asked by At

I learning python by using of the Keras high-level neural networks library. I made a simple neural network with only one neuron for a linear classification problem for 2 inputs and one outputs. My network is working well, but if I want to calculate the prediction self (to demonstrate the working of the NN), using the weights of the network, there will be a little difference between the own "implementation" of neural network's firing and Keras's. E.g.:
Using predict() method on trained network:

testset = np.array([[5],[1]])
prediction = model.predict(testset.transpose())
print prediction

The result is:

[[ 0.22708023]]

Calculate the result self:

# get the weights of the neural network
for layer in model.layers:
    weights = layer.get_weights()
# the math of the prediction
prediction_calc = testset[0]*weights[0][0]+testset[1]*weights[0][1]+1*weights[1]
print prediction_calc

The reusult is:

[ 0.22708024]

Why is this little difference between the two values? The neural network should do more as I made at calculating the prediction_calc variable.

I think it should be something with casting between variables. If I print the weights variable, I see, it is a matrices of float32 values.

[array([[-0.07256483],
   [ 0.02924729]], dtype=float32), array([ 0.56065708], dtype=float32)]

I don't find why is this difference, it should be a simple rounding error, but I don't know how to avoid it.

For some help here is the whole code:

import numpy as np

# fix random seed for reproducibility
seed = 7
np.random.seed(seed)

# load and transpose input data set
inputset = np.loadtxt("learningsets/hyperplane2d_INPUTS.csv", delimiter=",")
inputset = inputset.transpose()

# load output data set
outputset = np.loadtxt("learningsets/hyperplane2d_OUTPUTS.csv", delimiter=",")
outputset = outputset    

# build the simple NN
from keras.models import Sequential
model = Sequential() 

from keras.layers import Dense
# The neuron
# Dense: 2 inputs, 1 outputs . Linear activation
model.add(Dense(output_dim=1, input_dim=2, activation="linear"))
model.compile(loss='mean_squared_error', metrics=['accuracy'], optimizer='sgd')
model.fit(inputset, outputset, nb_epoch=20, batch_size=10)

# calculate prediction for one input
testset = np.array([[5],[1]])
predictions = model.predict(testset.transpose())
print predictions

# get the weights of the neural network
for layer in model.layers:
    weights = layer.get_weights()
# the math of the prediction
prediction_calc = testset[0]*weights[0][0]+testset[1]*weights[0][1]+1*weights[1]
print prediction_calc
0

There are 0 answers