我想在Keras找到成本函数。我正在运行具有损失函数categorical_crossentropy
的LSTM,并且我添加了一个正规化器。在我的Regularizer之后,如何根据我自己的分析输出成本函数的样子?
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))
答案 0 :(得分:2)
如果我的正规化器用于我自己的分析,我如何输出成本函数的样子?
当然,您可以通过获取要查看的图层的输出(yourlayer.output
)并将其打印来实现此目的(请参阅here)。然而,有更好的方法可视化这些东西。
这是一个功能强大的可视化工具,可让您跟踪和可视化您的指标,输出,架构,kernel_initializations等。好消息是,您已经可以使用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服务器(它在您的电脑上本地运行):
tensorboard --logdir=logs/run1
例如,这就是我的内核在我测试的两个不同模型上的样子(为了比较它们,你必须保存单独的运行,然后在父目录上启动Tensorboard)。这是在我的第二层的直方图选项卡上:
左侧上的模型我用 kernel_initializer='random_uniform'
初始化,因此它的形状是统一分布之一。 右侧上的模型我用 kernel_initializer='normal'
进行了初始化,这就是为什么它在我的时代(大约30)中显示为高斯分布。
通过这种方式,您可以以比打印输出更具交互性和可理解性的方式可视化内核和图层的“外观”。这只是Tensorboard的一大特色,它可以帮助您更快更好地开发深度学习模型。
当然,Tensorboard Callback和Tensorboard有更多选项,所以我建议你仔细阅读所提供的链接,如果你决定尝试这个。有关详细信息,您可以查看this和also this个问题。
编辑:所以,您评论您想知道您的正规化损失如何“分析”。让我们记住,通过向损失函数添加一个正则化器,我们基本上扩展了损失函数,以包含一些“惩罚”或偏好。因此,如果您使用cross_entropy
作为损失函数并添加l2
正则化器(即Euclidean Norm),权重为0.01,则您的整个损失函数将类似于: