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

时间:2019-04-26 10:02:16

标签: tensorflow machine-learning keras deep-learning

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

此外,我想如何使准确性出现。 这是代码。 https://github.com/simoninithomas/DNN-Speech-Recognizer/blob/master/train_utils.py

谢谢!

def train_model(input_to_softmax,                 pickle_path,                 save_model_path,                 train_json ='train_corpus.json',                 valid_json ='valid_corpus.json',                 minibatch_size = 20,                 光谱图= True,                 mfcc_dim = 13,                 优化器= SGD(lr = 0.02,衰减= 1e-6,动量= 0.9,nesterov = True,clipnorm = 5),                 epochs = 20,                 verbose = 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 [=============================]-276秒-损失:767.3973-损失值:727.8361 时代3/20 106/106 [=============================]-272秒-损失:752.6904-损失值:720.8375 时代4/20 106/106 [=============================]-261秒-损失:751.8432-损失值:728.3446 时代5/20 106/106 [=============================]-261s-损失:752.1302-val_loss:733.3166 时代6/20 106/106 [=============================]-264秒-损失:752.3786-损失值:722.4345 时代7/20 106/106 [=============================]-265秒-损失:752.7827-val_loss:723.2651 时代8/20 106/106 [=============================]-263秒-损失:752.5077-val_loss:736.0229 时代9/20 106/106 [=============================]-263秒-损失:752.5616-损失值:731.2018

1 个答案:

答案 0 :(得分:0)

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

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

  • 单个单位的准确性(在具有标签的位置取平均值。注意:同一数据点由于具有时间分类,因此具有多个标签)[将在0和1之间]
  • 错误率:可以定义为预测标签和真实标签之间的编辑距离[在数据点上平均为0到MAX_LABELS之间。
  • 在所有时间步和数据点上平均的标签精度。

没有理由使其在0到1之间。 另一方面,您的损失是连接主义的时间损失。这种损失会在每个时间步长预测出标签还是空白标签。然后,在标签上方使用交叉熵。两种概率分布的交叉熵只是一个正数,并且不在0和1之间。

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