Tensorflow tf.keras.Model.predict和call返回不同的结果

Tensorflow tf.keras.Model.predict和call返回不同的结果,tensorflow,keras,tf.keras,Tensorflow,Keras,Tf.keras,tf.keras.Model.predict并调用返回不同的结果 import tensorflow as tf import numpy as np tf.set ipts = tf.keras.Input([2]) x = tf.keras.layers.Dense(10)(ipts) x = tf.keras.layers.Dropout(0.5)(x) x = tf.keras.layers.Dense(3)(x) model = tf.keras.Model(ipts, x) mode

tf.keras.Model.predict
并调用返回不同的结果

import tensorflow as tf
import numpy as np
tf.set
ipts = tf.keras.Input([2])
x = tf.keras.layers.Dense(10)(ipts)
x = tf.keras.layers.Dropout(0.5)(x)
x = tf.keras.layers.Dense(3)(x)
model = tf.keras.Model(ipts, x)
model.summary()
sess = tf.Session()
sess.run(tf.global_variables_initializer())
y_train = model(tf.ones((2,2)),training=True)
y_test = model(tf.ones((2,2)),training=False)
sess.run(y_train)
sess.run(y_test)
model.predict(np.array([[1.,1.],[1.,1.]]))

sess.run(y_test)
应该与
model.predict(np.array([[1,1.],[1,1.]])
相同,但事实上它们是不同的。为什么?

您需要使用
K.set\u会话(sess)
将会话注册为您的Keras会话。然后
sess.run(y_test)
给出与
model.predict(np.array([[1,1.],[1,1.]])相同的结果。
model.predict不能使用training=false原因是您使用的是随机初始化的模型,所以当您调用sess.run(tf.global_variables_initializer())时,您将在tensorflow会话中初始化模型变量,如果调用predict,keras会初始化这些值