Я хочу оценить функцию потерь модели для каждого образца после тренировки.Простой вызов потерь приводит к отдельному значению для каждого пакета, поэтому я вызываю функцию потерь вручную для значения предиката ().
Это требует оценки тензора, поскольку потеря возвращает тензор.Оценить этот тензор достаточно просто, но вызов длится вечно, несмотря на то, что это простая операция.
Я пробовал session.run из сеанса keras, а также 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 секунд!)