在keras中输出loss/cost函数

Output the loss/cost function in keras

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

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))

How do i output what the cost function looks like after my regularizer this for my own analysis?

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

见面Tensorboard.

这是一个强大的可视化工具,可让您跟踪和可视化您的指标、输出、架构、kernel_initializations 等。好消息是,您已经可以使用 Tensorboard Keras 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 服务器(它在您的电脑上本地运行):

tensorboard --logdir=logs/run1

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

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

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

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

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