将受过训练的简单神经网与张量差区分开给出错误的结果,并改变了模型权重



我正在尝试教一个简单函数(f(t) = 2t(,然后就输入(df/dt = 2(计算衍生物。我使用一个具有一个密集层的网,没有激活:

model = Sequential()
model.add(Dense(output_dim=1, input_shape=(1,), bias_initializer='ones'))
opt = RMSprop(lr=0.01, rho=0.9, epsilon=None, decay=0.0)
model.compile(optimizer=opt, loss='mse', metrics=['mae'])#optimizer=opt,
model.summary()

我的数据由对t -> f(t)对组成,其中t[0, 1]上随机选择以计算我的网络的df/dt,我找到了此代码:https://groups.google.com/forum/#!/keras-users/g2jmncait9w/36mjzi7nbqaj和https://colab.research.google.com/drive/1l9ydia2n40fj3y09qb3r3r3r3rhqkpxoavjc

这是我在COLAB上的完整代码:

model.fit(train_x ,train_y, epochs=100,validation_data=(test_x, test_y),shuffle=False, batch_size=32)
model.layers[0].get_weights()# this displays 2.0069, quite right
outputTensor = model.output
listOfVariableTensors = model.inputs[0]
gradients = k.gradients(outputTensor, listOfVariableTensors)
sess = tf.InteractiveSession()
sess.run(tf.initialize_all_variables())
evaluated_gradients = sess.run(gradients,feed_dict={model.input:np.array([[10]])})
evaluated_gradients # this displays kinda random number
model.layers[0].get_weights() # this displays same number as above

我相信我的模型可以执行简单的w*t + b转换,因此其导数应仅为w。但是我发现的代码提供了错误的结果,并打破了经过训练的权重。我实际上认为它将它们重置为初始权重,因为如果我用kernel_initializer= "ones"初始化密度层的权重,则代码将返回1作为派生。

所以,我需要帮助神经网的正确推导。

sess = tf.InteractiveSession() # run this before anything happens
#....   
model.fit(train_x ,train_y, epochs=100,validation_data=(test_x, test_y),shuffle=False, batch_size=32)
model.layers[0].get_weights()# this displays 2.0069, quite right
outputTensor = model.output
listOfVariableTensors = model.inputs[0]
gradients = k.gradients(outputTensor, listOfVariableTensors)        
evaluated_gradients = sess.run(gradients,feed_dict={model.input:np.array([[10]])})
evaluated_gradients

最新更新