Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Accuracy during training #55

Closed
fsluckymao opened this issue Mar 11, 2019 · 10 comments
Closed

Accuracy during training #55

fsluckymao opened this issue Mar 11, 2019 · 10 comments

Comments

@fsluckymao
Copy link

fsluckymao commented Mar 11, 2019

Hi:@Canjie-Luo
请问在readme里面展示的在IC15 (2077)上one-stage的准确率有73.9%是在CVPR和NIPS两个数据集上跑训练过程中得到的最高val结果吗?我现在也在这两个数据集上跑,虽然还没有跑完(还有70000次迭代),但是val最高只有66%,并且在这附近震荡.您有什么建议吗?
P.S:中间服务器断过一次,我接着最近保存的模型跑得,断之前也是在65%左右震荡.
P.S2:除了扩大了字母表其他没变化。

@Canjie-Luo
Copy link
Owner

请问您把字母表扩大为多大呢?我看了最近的论文的结果,都是去除了符号进行评估的,加上符号评估应该会更低些。可以请教您吗:您是要做现有技术的应用,还是前沿研究呢?

@fsluckymao
Copy link
Author

Hi: @Canjie-Luo
我就是加了特殊字符,除了用问号分隔,$结尾,字母表长度加了31.
因为我看IC15数据集是有这些符号的,毕竟字符识别加了特殊字符更加具有一般性,工程上的应用也更广泛。
我是在学习积累阶段, 谈不上搞研究.
另外一个问题:这里问什么要+1

targets[i][1:1+text_length.data[i]] = text.data[start_id:start_id+text_length.data[i]]+1

Thanks!

@Canjie-Luo
Copy link
Owner

因为训练的时候,用的是前一个step的label作为语义信息。

@fsluckymao
Copy link
Author

Hi: @Canjie-Luo
我可能误导您了,您应该说的是前面的“[1:1+text_length.data[i]]”,我能理解,因为解码阶段最开始没有前一个step的label,就用全零初始化了。
我想知道为什么要给编码后的文本即每个字符对应字典位置加一?
"text.data[start_id:start_id+text_length.data[i]]+1 "

@Canjie-Luo
Copy link
Owner

一个经验的小设置而已,下列的index全部加了1,您那边统一了就行:

self.char_embeddings = Parameter(torch.randn(num_classes+1, num_embeddings))

targets_temp += 1

@fsluckymao
Copy link
Author

Hi: @Canjie-Luo
请问这么设置和您在代码里注释的保留0作为blank有关吗。

# NOTE: 0 is reserved for 'blank' required by wrap_ctc

这里的self.dict{}中value为0的key是字母表中的'a',请问哪里体现了保留0为blank呢?
thanks!

@Canjie-Luo
Copy link
Owner

上边讨论的问题,和字母表的次序无关,只是类别的一个embedding,作为语义信息而已。定义embedding时候是+1的,例如a->1,对应embedding矩阵的第1行,而不是第0行,那么后续操作就对应+1。

@fsluckymao
Copy link
Author

Hi:@Canjie-Luo
我还是不知道注释“0 is reserved for 'blank' required by wrap_ctc ”的意义,我会看下CRNN,谢谢您对我的帮助!

@Canjie-Luo
Copy link
Owner

😂客气了,这部分代码是继承CRNN的写法,忘记删除这个无关的注释了。您非常仔细,谢谢您。您可以pull request,成为一个contributor~

@aagainbeyond2
Copy link

计算ctc loss需要输入稀疏矩阵,因此要把0留给blank,但是这里attention方法用交叉熵算loss,所以加不加1没关系

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants