1

我试图在 Keras 中找到成本函数。我正在运行一个带有损失函数的 LSTM,categorical_crossentropy并添加了一个正则化器。在我的正则化器之后,我如何输出成本函数的样子以供我自己分析?

model = Sequential()
model.add(LSTM(
    NUM_HIDDEN_UNITS,
    return_sequences=True,
    input_shape=(PHRASE_LEN, SYMBOL_DIM),
    kernel_regularizer=regularizers.l2(0.01)
    ))
model.add(Dropout(0.3))
model.add(LSTM(NUM_HIDDEN_UNITS, return_sequences=False))
model.add(Dropout(0.3))
model.add(Dense(SYMBOL_DIM))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy',
    optimizer=RMSprop(lr=1e-03, rho=0.9, epsilon=1e-08))
4

1 回答 1

2

在我的正则化器之后,我如何输出成本函数的样子以供我自己分析?

当然,您可以通过获取yourlayer.output您想要查看的图层的输出 () 并打印它来实现这一点(请参见此处)。然而,有更好的方法来可视化这些东西。

认识张量板

这是一个强大的可视化工具,使您能够跟踪和可视化您的指标、输出、架构、内核初始化等。好消息是已经有一个Tensorboard Keras Callback可以用于此目的;你只需要导入它。要使用它,只需将 Callback 的一个实例传递给您的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)。这是在我的第二层的直方图选项卡上:

在此处输入图像描述

左边的模型我用 初始化kernel_initializer='random_uniform',因此它的形状是一个均匀分布。右边的模型我用 初始化kernel_initializer='normal',因此它在我的整个时期(大约 30 个)都显示为高斯分布。

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

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

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

在此处输入图像描述

于 2018-02-02T23:12:17.280 回答