tensorflow - 使准确性出现在我的结果中并解释损失和 val_loss 的结果

标签 tensorflow machine-learning keras deep-learning

我是 tensorflow 新手,我正在尝试通过 github 中的示例来学习它,现在我找到了一个示例,但损失和 val_loss 的结果大于“1”(您可以在下面看到结果在 800 之间)和 700 )而通常在其他示例中,loss 和 val_loss 介于 0 和 1 之间)

另外我想知道如何使显示的准确性。 这是代码。 https://github.com/simoninithomas/DNN-Speech-Recognizer/blob/master/train_utils.py

谢谢!

def train_model(input_to_softmax, 泡菜路径, 保存模型路径, train_json='train_corpus.json', valid_json='valid_corpus.json', 小批量大小=20, 频谱图=真, mfcc_dim=13, 优化器=SGD(lr=0.02,衰减=1e-6,动量=0.9,nesterov=True,clipnorm=5), 纪元=20, 详细=1, sort_by_duration=False, max_duration=10.0):

# create a class instance for obtaining batches of data
audio_gen = AudioGenerator(minibatch_size=minibatch_size, 
    spectrogram=spectrogram, mfcc_dim=mfcc_dim, max_duration=max_duration,
    sort_by_duration=sort_by_duration)
# add the training data to the generator
audio_gen.load_train_data(train_json)
audio_gen.load_validation_data(valid_json)
# calculate steps_per_epoch
num_train_examples=len(audio_gen.train_audio_paths)
steps_per_epoch = num_train_examples//minibatch_size
# calculate validation_steps
num_valid_samples = len(audio_gen.valid_audio_paths) 
validation_steps = num_valid_samples//minibatch_size

# add CTC loss to the NN specified in input_to_softmax
model = add_ctc_loss(input_to_softmax)

# CTC loss is implemented elsewhere, so use a dummy lambda function for the loss
model.compile(loss={'ctc': lambda y_true, y_pred: y_pred}, optimizer=optimizer)

# make results/ directory, if necessary
if not os.path.exists('results'):
    os.makedirs('results')

# add checkpointer
checkpointer = ModelCheckpoint(filepath='results/'+save_model_path, verbose=0)

# train the model
hist = model.fit_generator(generator=audio_gen.next_train(), steps_per_epoch=steps_per_epoch,
    epochs=epochs, validation_data=audio_gen.next_valid(), validation_steps=validation_steps,
    callbacks=[checkpointer], verbose=verbose)

# save model loss
with open('results/'+pickle_path, 'wb') as f:

pickle.dump(hist.history, f)

纪元 1/20 106/106 [================================] - 302s - 损失:839.6881 - val_loss:744.7609 纪元 2/20 106/106 [================================] - 276s - 损失:767.3973 - val_loss:727.8361 纪元 3/20 106/106 [================================] - 272s - 损失:752.6904 - val_loss:720.8375 纪元 4/20 106/106 [================================] - 261s - 损失:751.8432 - val_loss:728.3446 纪元 5/20 106/106 [================================] - 261s - 损失:752.1302 - val_loss:733.3166 纪元 6/20 106/106 [================================] - 264s - 损失:752.3786 - val_loss:722.4345 纪元 7/20 106/106 [================================] - 265s - 损失:752.7827 - val_loss:723.2651 纪元 8/20 106/106 [================================] - 263s - 损失:752.5077 - val_loss:736.0229 纪元 9/20 106/106 [================================] - 263s - 损失:752.5616 - val_loss:731.2018

最佳答案

您正在使用的损失在此pdf中进行了描述。 。

当您说准确性时,它可能意味着很多事情:

  • 单个单位准确度(对您拥有的标签进行平均。注意:由于是时间分类,同一数据点有多个标签)[将介于 0 和 1 之间]
  • 错误率:可以定义为预测标签与真实标签之间的编辑距离[在数据点上平均介于 0 和 MAX_LABELS 之间。
  • 所有时间步长和数据点的平均标签精度。

没有理由让它介于 0 和 1 之间。 另一方面,你的损失是联结主义的时间损失。这种损失在每个时间步预测标签或空白标签。然后我们在标签之上使用交叉熵。两个概率分布的交叉熵只是一个正量,并且不在0和1之间。

因此这不是问题。如果您想查看准确性,您将需要一些测试数据并做出预测。您可以使用 Tensorflow 根据您想要的任何指标计算预期标签的准确度(如上所述),并将其用作您的准确度。从技术上讲,您可以使用 Tensorflow 中定义的任何指标:https://www.tensorflow.org/api_docs/python/tf/metrics/ ,在您的预测步骤之后。

关于tensorflow - 使准确性出现在我的结果中并解释损失和 val_loss 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55865232/

相关文章:

python - 为什么这个 Keras 模型需要超过 6GB 的内存?

tensorflow - 在序列模型中使用填充时,Keras 验证准确性是否有效/可靠?

python - 堆叠 LSTM 单元所有输出的总和 - Tensorflow

python - 正弦嵌入 - Attention is all you need

python - 输入到神经网络的 NP 数组会导致形状错误

docker - TensorFlow 2 Mask-RCNN?

machine-learning - Keras/TensorFlow BatchNormalization 正在规范化什么

python - 没有 session 的 Tensorflow eval() 或将变量移动到另一个 session

c++ - 如何使用 C++ API 限制 tensorflow (r1.1) 中的 GPU 使用

python - 如何在 tensorflow session 中运行 Keras.model() 进行预测?