Python 3.x Tensorflow自定义损耗功能-can';t在损失函数中获取y_pred和y_true的样本

Python 3.x Tensorflow自定义损耗功能-can';t在损失函数中获取y_pred和y_true的样本,python-3.x,lstm,tensorflow2.0,tf.keras,loss-function,Python 3.x,Lstm,Tensorflow2.0,Tf.keras,Loss Function,我正在运行一个运行良好的LSTM网络(TF2.0)。我的问题从尝试修改损失函数开始。 我计划在“y_true”和“y_pred”上调整一些数据操作,但由于TF强制将数据保持为张量(而不是将其转换为Pandas或NumPy),这是一个挑战。 为了更好地控制损失函数中的数据,我模拟了tf.keras.loss.mae函数 我的目标是能够看到数据('y_true'和'y_pred'),这样我就可以进行所需的调整。 原始功能: def mean_absolute_error(y_true, y_pred

我正在运行一个运行良好的LSTM网络(TF2.0)。我的问题从尝试修改损失函数开始。 我计划在“y_true”和“y_pred”上调整一些数据操作,但由于TF强制将数据保持为张量(而不是将其转换为Pandas或NumPy),这是一个挑战。 为了更好地控制损失函数中的数据,我模拟了tf.keras.loss.mae函数

我的目标是能够看到数据('y_true'和'y_pred'),这样我就可以进行所需的调整。

原始功能:

def mean_absolute_error(y_true, y_pred):
  y_pred = ops.convert_to_tensor(y_pred)
  y_true = math_ops.cast(y_true, y_pred.dtype)
  return K.mean(math_ops.abs(y_pred - y_true), axis=-1)
调试调整后:

from tensorflow.python.framework import ops
from tensorflow.python.ops import math_ops
import tensorflow.keras.backend as K
def mean_absolute_error_test(y_true, y_pred):
     global temp_true
     temp_true=y_true
     print(y_true)
     y_pred = ops.convert_to_tensor(y_pred)
     y_true = math_ops.cast(y_true, y_pred.dtype)
     return K.mean(math_ops.abs(y_pred - y_true), axis=-1)
当我运行model.compile并打印y_true时,我得到: 张量(“密集目标:0”,形状=(无,无),数据类型=浮点32)

type=tensorflow.python.framework.ops.Tensor

有人知道我怎么才能看到“Yu pred”和“Yu true”吗?或者我错过了什么? 好像我看不到y_的样本是真的或者数据是空的

主要代码部分:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.layers import Dropout,Dense
from tensorflow.keras import layers
from tensorflow.keras.models import Sequential, load_model
from tensorflow.python.keras.layers.recurrent import LSTM
from tensorflow.keras.callbacks import EarlyStopping
K.clear_session()

model = Sequential()
model.add(LSTM(20,activation='relu',input_shape=(look_back,len(training_columns)),recurrent_dropout=0.4))
model.add(Dropout(0.1))
model.add(Dense(1, activation='linear'))
model.compile(optimizer='adam', loss=test2,experimental_run_tf_function=False)# mse,mean_squared_logarithmic_error
num_epochs = 20
es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=3)
history=model.fit(X_train_lstm, y_train_lstm, epochs = num_epochs, batch_size = 128,shuffle=False,verbose=1,validation_data=[X_test_lstm,y_test_lstm],callbacks=[es])

“查看‘y_pred’和‘y_true’是什么意思?如果使用
model.compile
model.fit
,则不能查看中间张量,因为它们在内部生成一个图形。您需要使用带有
GradientTape
的自定义训练循环才能看到张量值。@DavidS看到“y_pred”和“y_true”表示能够看到张量值。我找到了解决这个问题的方法。谢谢all@RanKremer,我理解您的意思是将值打印到控制台或写入文件,对吗?你能分享你找到的解决方案吗?看到‘y_pred’和‘y_true’是什么意思?如果你使用
模型,你就不能看到中间张量。编译
模型。拟合
,因为它们在内部生成一个图。您需要使用带有
GradientTape
的自定义训练循环才能看到张量值。@DavidS看到“y_pred”和“y_true”表示能够看到张量值。我找到了解决这个问题的方法。谢谢all@RanKremer,我理解您的意思是将值打印到控制台或写入文件,对吗?你能分享一下你找到的解决方案吗?