Skip to content

Some question about the code #18

Description

@Liqq1

尝试复现了一下,发现有几个问题(不确定),如遇到相同问题,欢迎讨论。

1.class JsonReader

对于build_vocab.py中的class JsonReader,在构建vocab的时候是没有问题的,但在dataset.py中,self.caption[image_name],image_name已经是图像名称,而不需要像build_vocab.py中用key[序号]来取。

image

所以我认为在运行trainer.py->dataset.py的时候class JsonReader应该改为如下。实验结束也表明修改之后的 JsonReader才会构造出不是空的target。
class JsonReader(object):
    def __init__(self, json_file):
        self.data = self.__read_json(json_file)

    def __read_json(self, filename):
        with open(filename, 'r') as f:
            data = json.load(f)
        return data

    def __getitem__(self, item):
        return self.data[item]

    def __len__(self):
        return len(self.data)

2.Sentence LSTM

和issue #11 中所说的一样,要加上这句话不然状态没法更新只会输出同样的内容。
image

3.Word LSTM

这里的写法有点不太清楚,只能看到原先被注释掉的。* word_mask).sum() * (0.9 ** word_index),这些的含义是什么?
image

4.Class MLC

image

感觉圈起来的那一句,应该返回的torch.topk的[0],[0]才是tensor中的内容,而[1]是序号。不知道这边我有没有理解错。

5.MSEloss

此代码中,在做多标签分类的时候用的是MSEloss(是可行的,但不知道是否和文中对应);而论文原文中所说的是交叉熵分类(感觉应该用sigmoid+BCELoss?)

6.图像的输入

文中提到会把image划分成多个region作为输入,但代码中直接使用的是原image(经过了transform操作中的RandomCrop);是直接讲划分成多个region理解为RandomCrop操作吗?还是有另外的操作方式,这里也不是很清楚。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions