我是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
答案 0 :(得分:0)
此pdf中描述了您正在使用的损失。
当您说准确性时,可能意味着很多事情:
没有理由使其在0到1之间。 另一方面,您的损失是连接主义的时间损失。这种损失会在每个时间步长预测出标签还是空白标签。然后,在标签上方使用交叉熵。两种概率分布的交叉熵只是一个正数,并且不在0和1之间。
因此这不是问题。如果您想查看精度,则可以获取一些测试数据并进行预测。您可以使用Tensorflow根据期望的标签使用期望的任何度量来计算准确性(如上定义),并将其用作准确性。在预测步骤之后,您可以从技术上使用Tensorflow:https://www.tensorflow.org/api_docs/python/tf/metrics/中定义的任何指标。