Walleclipse / Deep_Speaker-speaker_recognition_system

Keras implementation of ‘’Deep Speaker: an End-to-End Neural Speaker Embedding System‘’ (speaker recognition)
245 stars 81 forks source link

运行出错 #71

Closed ZJG0 closed 3 years ago

ZJG0 commented 3 years ago

image 求助!!!

Walleclipse commented 3 years ago

能详细说一下是程序运行到什么位置时出错了么? 似乎看起来是输入数据的shape不匹配。你可以检查一下输入数据是否正常?或者也有可能是keras版本不对。

ZJG0 commented 3 years ago

确实是维度不匹配,运行到了loss = model.train_on_batch(x, y),通过调整模型设置的一些维度,目前解决了,但是训练时出现了准确率比较高到了92%+,EER却在0.4+;loss值低于0.06,准确率却低于80%的一些问题,不知道是否是修改了网络维度出现的问题。

Walleclipse commented 3 years ago

你用的就是 LibriSpeech数据集么? train_on_batch 维度不匹配应该是 triplet_loss.py 中的问题, 你可以看一下 triplet_loss.py 中的38~40行,在计算triplet_loss 的时候数据会被三等分,所以构造数据时,前 BATCH_SIZE 个数据看做是anchor,中间BATCH_SIZE个数据是positive,最后BATCH_SIZE个数据是positive,如果不是这样,那么模型就无法训练。所以准确率低可能是这个原因。 当然如果你用的是别的数据集,那么也有可能那个数据集本身就比较难,准确率低。 你可以跑pretraining.py 验证一下。

ZJG0 commented 3 years ago

我没有使用LibriSpeech数据集,在三元组损失的文件中确实是分成了三部分。预训练我跑了,准确率也不高,还有个问题就是在选择batch时使用x, _ = select_batch.best_batch(model, batch_size=c.BATCH_SIZE)x, y = batch.to_inputs()会不会影响最终的准确率。

yaoyao1206 commented 3 years ago

image 您好这个bug该如何解决呢

Walleclipse commented 3 years ago

我没有使用LibriSpeech数据集,在三元组损失的文件中确实是分成了三部分。预训练我跑了,准确率也不高,还有个问题就是在选择batch时使用x, _ = select_batch.best_batch(model, batch_size=c.BATCH_SIZE)x, y = batch.to_inputs()会不会影响最终的准确率。

如果预训练准确率不高,那么很可能这个数据集本来就比较难训练,你得到的结果可能是对的。为了验证代码,你可以试一下运行Librispeech数据集。 x, _ = select_batch.best_batch(model, batch_size=c.BATCH_SIZE)是选择hard negative mining的方法,你这里说的x, y = batch.to_inputs()里的 batch 应该是指随机选择样本 batch = stochastic_mini_batch(libri, batch_size=c.BATCH_SIZE, unique_speakers=unique_speakers)对吧?这个stochastic_mini_batch是随机选择样本。一般来说这两种方法效果不会差太多,但是select_batch.best_batch的性能会好一些。

Walleclipse commented 3 years ago

image 您好这个bug该如何解决呢

你好, 你用的数据中不同的说话者 unique_speakers 数量太少了,你可以print(unique_speakers) 验证一下,可能只有1个speaker,所以从中随机选取2个的speaker时出错了。请检查一下你的数据读取是否正确。