我通过使用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