Python 以keras为单位输出损失/成本函数

Python 以keras为单位输出损失/成本函数,python,keras,loss-function,regularized,Python,Keras,Loss Function,Regularized,我试图找到Keras中的成本函数。我正在运行一个带有损失函数的LSTMcategorical\u crossentropy,并添加了一个正则化器。如何输出正则化后的代价函数,以便自己进行分析 model=Sequential() 模型。添加(LSTM)( 隐藏单位的数量, return_sequences=True, 输入形状=(短语长度、符号尺寸), 核正则化子=正则化子.l2(0.01) )) 模型。添加(辍学(0.3)) add(LSTM(NUM_HIDDEN_UNITS,return_s

我试图找到Keras中的成本函数。我正在运行一个带有损失函数的LSTM
categorical\u crossentropy
,并添加了一个正则化器。如何输出正则化后的代价函数,以便自己进行分析

model=Sequential()
模型。添加(LSTM)(
隐藏单位的数量,
return_sequences=True,
输入形状=(短语长度、符号尺寸),
核正则化子=正则化子.l2(0.01)
))
模型。添加(辍学(0.3))
add(LSTM(NUM_HIDDEN_UNITS,return_sequences=False))
模型。添加(辍学(0.3))
模型添加(密集(符号尺寸))
添加(激活('softmax'))
model.compile(loss='classifical_crossentropy',
优化器=RMSprop(lr=1e-03,rho=0.9,ε=1e-08))
如何输出正则化后的代价函数,以便自己进行分析

当然,您可以通过获取要查看的图层的输出(
yourlayer.output
)并将其打印(请参阅)来实现这一点。然而,有更好的方法来形象化这些事情

见面

这是一个强大的可视化工具,使您能够跟踪和可视化您的度量、输出、体系结构、内核初始化等。好消息是,已经有一个可用于此目的的工具;你只需要导入它。要使用它,只需将回调实例传递给
fit
方法,如下所示:

from keras.callbacks import TensorBoard
#indicate folder to save, plus other options
tensorboard = TensorBoard(log_dir='./logs/run1', histogram_freq=1,
    write_graph=True, write_images=False)  

#save it in your callback list
callbacks_list = [tensorboard]
#then pass to fit as callback, remember to use validation_data also
model.fit(X, Y, callbacks=callbacks_list, epochs=64, 
    validation_data=(X_test, Y_test), shuffle=True)
之后,通过执行以下命令启动Tensorboard服务器(它在pc上本地运行):

tensorboard --logdir=logs/run1

例如,这就是我测试的两个不同模型上的内核的样子(要比较它们,必须保存单独的运行,然后在父目录上启动Tensorboard)。这在“直方图”选项卡上,在我的第二层:

左侧的模型我使用
内核初始化器class='random'u uniform'
初始化,因此其形状是均匀分布的。右侧的模型我使用
kernel\u initializer='normal'
初始化,因此它在我的整个时代(大约30年)都是高斯分布

通过这种方式,您可以以比打印输出更具交互性和可理解性的方式可视化内核和层的“外观”。这只是Tensorboard的一个重要功能,它可以帮助您更快更好地开发深度学习模型

当然,对于Tensorboard回调和一般的Tensorboard回调还有更多的选项,因此如果您决定尝试此操作,我建议您彻底阅读提供的链接。有关更多信息,您可以查看和回答问题

编辑:因此,您评论您想知道您的常规损失在分析上“看起来”如何。让我们记住,通过向损失函数添加正则化器,我们基本上是在扩展损失函数,以在其中包含一些“惩罚”或偏好。因此,如果使用
交叉熵
作为损失函数,并添加一个权重为0.01的
l2
正则化子(即欧几里德范数),则整个损失函数将如下所示:


你说的“长相”是什么意思?当您调用model.fit方法时,是否正在查看损失?谢谢,我已经在运行tensorboard了。我的具体意思是,如何将完整损失函数作为其输入的可读函数输出。通常交叉熵是我的损失函数,但在加入正则化后,我得到了奇怪的损失值。例如,如果我单独运行交叉熵,我的损失看起来是这样的:
def损失(yHat,y):
如果yHat==1:
return-log(y)
否则:
return-log(1-y)
但是由于我添加了正则化,我不知道它看起来是什么like@MikeManh好啊所以,当你将正则化应用到你的模型时,你基本上是在“扩展”你的损失函数。假设你的损失函数是
cross\u entropy
,你的正则化损失函数是
J(x)=cross\u entropy(x)+REG
。在这种情况下,当您使用
l2
作为权重为0.01的正则化器时,它将是
J(x)=交叉熵(x)+0.01*l2(x)
。这就是损失函数现在的分析形式。我说对了吗?