什么是训练准确率和训练损失以及为什么我们需要计算它们?

What is training accuracy and training loss and why we need to compute them?

我是 Lstm 和机器学习的新手,我想了解其中的一些概念。下面是我的 Lstm 模型的代码。

Lstm 模型:

model = Sequential()
model.add(Embedding(vocab_size, 50, input_length=max_length-1))
model.add(LSTM(50))
model.add(Dropout(0.1))
model.add(Dense(vocab_size, activation='softmax'))

early_stopping = EarlyStopping(monitor='val_loss', patience=42)                                                                                                            
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
history = model.fit(X, y, validation_split=0.2, epochs=500, verbose=2,batch_size = 20)

下面是我的输出示例:

以及 train/test 准确率和 train/test 损失图:

我的理解(如有错误请指正)是val_loss和val_accuracy是测试数据的loss和accuracy。我的问题是,什么是列车精度和列车损失以及如何计算这些值?谢谢。

1.损失和 val_loss-

在深度学习中,loss 是神经网络试图最小化的值。这就是神经网络通过以减少损失的方式调整权重和偏差来学习的方式。

lossval_loss的区别在于前者应用于train set,后者应用于test set。因此,后者很好地表明了模型如何处理看不见的数据。

2。准确性和 val_accuracy-

再一次,acctraining data 上,val_accvalidation data 上。最好依靠 val_acc 来公平地表示模型性能,因为一个好的神经网络最终会以 100% 的速度拟合训练数据,但在未见过的数据上表现不佳。

val_acc 停止增加时应停止训练,否则您的模型可能会过拟合。您可以使用 earlystopping 回调来停止训练。

3。为什么我们需要训练精度和损失?

这不是一个有意义的评估指标,因为具有足够参数的神经网络基本上可以记住训练数据的标签,然后在以前看不见的例子上的表现并不比随机猜测好。

但是,在训练期间以固定的时间间隔监视 accuracyloss 可能会很有用,因为它可能表明后端是否按预期运行以及训练过程是否需要停止了。

有关提前停止的详细说明,请参阅 here

4. accuracy和loss是怎么计算的?

根据编译模型时指定的损失和指标,在您训练时计算损失和准确性。在训练之前,您必须编译模型以配置学习过程。这允许您指定 optimizerloss functionmetrics,这反过来又是模型拟合函数如何知道要使用什么损失函数、要跟踪什么指标等。

可以找到 loss 函数(如二进制交叉熵)文档 here and the metrics (like accuracy) documentation can be found here