Keras

时间:2016-12-17 16:17:37

标签: python neural-network precision keras

我通过使用Keras高级神经网络库来学习python。 我制作了一个简单的神经网络,只有一个神经元,用于2个输入和1个输出的线性分类问题。 我的网络运行良好,但如果我想计算预测自我(以演示NN的工作),使用网络的权重,自己和#之间会有一点差异34;实施"神经网络的射击和Keras的。例如: -
在训练有素的网络上使用predict()方法:

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

结果是:

[[ 0.22708023]]

计算结果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

reusult是:

[ 0.22708024]

为什么这两个值之间的差别很小?神经网络应该像我在计算prediction_calc变量时做的更多。

我认为它应该是变量之间的转换。如果我打印权重变量,我看,它是float32值的矩阵。

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

我不知道为什么会出现这种差异,这应该是一个简单的舍入误差,但我不知道如何避免它。

对于一些帮助,这里是整个代码:

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 个答案:

没有答案