我有一个使用Keras和Tensorflow训练的模型作为我的后端,但现在我需要将我的模型转换为某个应用程序的张量流图.我试图这样做并做出预测以确保它正常工作,但是当与从model.predict()收集的结果进行比较时,我得到了非常不同的值.例如:
from keras.models import load_model
import tensorflow as tf
model = load_model('model_file.h5')
x_placeholder = tf.placeholder(tf.float32, shape=(None,7214,1))
y = model(x_placeholder)
x = np.ones((1,7214,1))
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print("Predictions from:\ntf graph: "+str(sess.run(y, feed_dict={x_placeholder:x})))
print("keras predict: "+str(model.predict(x)))
Run Code Online (Sandbox Code Playgroud)
收益:
Predictions from:
tf graph: [[-0.1015993 0.07432419 0.0592984 ]]
keras predict: [[ 0.39339241 0.57949686 -3.67846966]]
Run Code Online (Sandbox Code Playgroud)
来自keras预测的值是正确的,但tf图结果不是.
如果它有助于知道最终的预期应用程序,我正在创建一个带有tf.gradients()函数的jacobian矩阵,但是当与theano的jacobian函数进行比较时,它目前没有返回正确的结果,这给出了正确的jacobian.这是我的张量流jacobian代码:
x = tf.placeholder(tf.float32, shape=(None,7214,1))
y = tf.reshape(model(x)[0],[-1])
y_list = tf.unstack(y)
jacobian_list = [tf.gradients(y_, x)[0] for y_ in y_list]
jacobian = tf.stack(jacobian_list)
Run Code Online (Sandbox Code Playgroud)
编辑:模型代码
import numpy as np
from keras.models …Run Code Online (Sandbox Code Playgroud) 我有一套相当复杂的模型,我正在训练,我正在寻找一种方法来保存和加载模型优化器状态."训练模型"由几个其他"体重模型"的不同组合组成,其中一些具有共同的权重,一些具有取决于训练者的冻结权重等.分享的例子有点过于复杂,但简而言之,我无法使用model.save('model_file.h5'),keras.models.load_model('model_file.h5')停止和开始训练时.
model.load_weights('weight_file.h5')如果训练已经完成,使用可以很好地测试我的模型,但是如果我尝试使用这种方法继续训练模型,那么损失甚至不会回到最后位置.我已经读过这是因为没有使用这种方法保存优化器状态是有意义的.但是,我需要一种方法来保存和加载我的教练模型的优化器的状态.似乎keras曾经拥有过,model.optimizer.get_sate()而且model.optimizer.set_sate()这将完成我所追求的目标,但似乎不再是这种情况了(至少对于Adam优化器而言).当前的Keras还有其他解决方案吗?