Closed ZJG0 closed 3 years ago
求助!!!
能详细说一下是程序运行到什么位置时出错了么? 似乎看起来是输入数据的shape不匹配。你可以检查一下输入数据是否正常?或者也有可能是keras版本不对。
确实是维度不匹配,运行到了loss = model.train_on_batch(x, y)
,通过调整模型设置的一些维度,目前解决了,但是训练时出现了准确率比较高到了92%+,EER却在0.4+;loss值低于0.06,准确率却低于80%的一些问题,不知道是否是修改了网络维度出现的问题。
你用的就是 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 验证一下。
我没有使用LibriSpeech数据集,在三元组损失的文件中确实是分成了三部分。预训练我跑了,准确率也不高,还有个问题就是在选择batch时使用x, _ = select_batch.best_batch(model, batch_size=c.BATCH_SIZE)
与x, y = batch.to_inputs()
会不会影响最终的准确率。
您好这个bug该如何解决呢
我没有使用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
的性能会好一些。
您好这个bug该如何解决呢
你好,
你用的数据中不同的说话者 unique_speakers
数量太少了,你可以print(unique_speakers)
验证一下,可能只有1个speaker,所以从中随机选取2个的speaker时出错了。请检查一下你的数据读取是否正确。