【发布时间】:2019-06-06 17:06:13
【问题描述】:
我想在训练后评估每个样本的模型损失函数。只调用 loss 会为每个批次生成一个值,因此我在 predict()ed 值上手动调用损失函数。
这需要一个张量评估,因为损失返回一个张量。评估这个张量很容易,但调用需要很长时间,尽管是一个简单的操作。
我已经尝试过 keras 会话中的 session.run 以及 keras.backend.eval,两者都有相同的问题。我也尝试过升级 keras,但它已经在 2.2.4 上
import keras
indim = 28
model = Sequential([Dense(8,input_shape=(indim,),activation='tanh'),Dense(4,activation='tanh'),Dense(1,activation='linear')])
model.compile(optimizer='adam',loss='mae')
def foo():
for i in range(0,500):
input = np.random.rand(32,28)
Y = np.random.rand(32,1)
Ypred = model.predict(input)
loss = model.loss_functions[0](Y,Ypred)
loss = keras.backend.eval(loss)
%prun foo()
我希望上面的例子能在几分之一秒内完成。第一次需要 20 秒,第二次运行需要 40 秒,分析器返回:
500 27.580 0.055 27.580 0.055 {built-in method _pywrap_tensorflow_internal.ExtendSession}
500 18.866 0.038 18.866 0.038 {built-in method _pywrap_tensorflow_internal.TF_SessionRun_wrapper}
16500 0.124 0.000 0.129 0.000 pywrap_tensorflow_internal.py:39(_swig_setattr_nondynamic)
后续调用需要的时间越来越长(20、40、80 秒!)
【问题讨论】:
-
你只想丢失每批吗?
model.evaluate呢? -
我想要丢失每个样本。当然,我可以制作 1 大小的批次并对其进行评估,但我认为这会更慢,并且预计 .predict 调用(通常)需要更长的时间
标签: python tensorflow keras