pytorch-book
pytorch-book copied to clipboard
第十章图像描述中model.py和main.py的问题
我跑了main.py之后
可视化原始图片 + 可视化人工的描述语句
raw_img = _data['ix2id'][indexes[0]]
img_path = opt.img_path + raw_img
raw_img = Image.open(img_path).convert('RGB')
raw_img = tv.transforms.ToTensor()(raw_img)
raw_caption = captions.data[:, 0]
raw_caption = ''.join([_data['ix2word'][ii] for ii in raw_caption])
vis.text(raw_caption, u'raw_caption')
vis.img('raw', raw_img, caption=raw_caption)
# 可视化网络生成的描述语句
results = model.generate(imgs.data[0])
vis.text('</br>'.join(results), u'caption')
以上部分的下面这两句
raw_caption = captions.data[:, 0]
raw_caption = ''.join([_data['ix2word'][ii] for ii in raw_caption])
报错keyerror 我去网上搜了,只有类似问题,不过看起来是数据类型的问题 应该是因为ii想读的是标量,结果读到一个tensor?反正半懂不懂的我把它改成了
raw_caption = t.tensor(captions.data[:, 0],device='cpu').numpy()
然后model.py的以下部分(原文第59,60行)又报错,应该还是同样的问题
sentences, score = cap_gen.beam_search(img)
sentences = [' '.join([self.ix2word[idx] for idx in sent]) for sent in sentences]
我在这两句之间改成了
sentences, score = cap_gen.beam_search(img)
sentences1=[]
for i in range(len(sentences)):
sentences1.append([])
for ii in sentences[i]:
a=ii.item()
sentences1[i].append(a)
sentences = [' '.join([self.ix2word[idx] for idx in sent]) for sent in sentences1]
结果跑通了,但是觉得大佬们肯定有更理论的解释和更高明的方法,希望大佬们指点下我这个菜鸡
直接把 sentences = [' '.join([self.ix2word[idx] for idx in sent]) for sent in sentences1] 改为 sentences = [' '.join([self.ix2word[int(idx)] for idx in sent]) for sent in sentences1] 就好了
@Canadalynx 楼主用@chenyuntc的demo跑出其给出的结果了吗?
@Canadalynx 楼主用@chenyuntc的demo跑出其给出的结果了吗?
没有,我在实验室服务器训练了11个epoch 结果 一个 戴着 墨镜 的 女人 和 一个 戴着 墨镜 的 女人 走 在 道路 上 </EOS> 一个 戴着 墨镜 的 女人 和 一个 戴着 帽子 的 男人 走 在 道路 上 </EOS> 一个 戴着 墨镜 的 女人 和 一个 戴着 帽子 的 女人 走 在 道路 上 </EOS>
直接把 sentences = [' '.join([self.ix2word[idx] for idx in sent]) for sent in sentences1] 改为 sentences = [' '.join([self.ix2word[int(idx)] for idx in sent]) for sent in sentences1] 就好了 太感谢了,有用。效果和idx.item()一样,我之前在for循环里头加,提示不行,脑残了。。。应该在前面加,太菜了😓
请问一下你们的数据集是怎么搞到的 我好像下载不下来
请问一下你们的数据集是怎么搞到的 我好像下载不下来
我用mega那个下的
我那个链接一直打不开.... 这可咋整,哥们,可以分享一下,最近刚写完。
我那个链接一直打不开.... 这可咋整,哥们,可以分享一下吗?最近刚写完。
可以了,哥们,谢谢
sentences = [' '.join([self.ix2word[idx.item()] for idx in sent]) for sent in sentences1] 也可以,int()我是第一次见
sentences = [' '.join([self.ix2word[idx.item()] for idx in sent]) for sent in sentences1] 也可以,int()我是第一次见
谢拉,前面那个老哥回答的时候我就想到了
@Canadalynx ,我20个epoch的结果是 一个 戴着 墨镜 的 男人 和 一个 穿着 黑色 外套 的 男人 走 在 道路 上 </EOS> 一个 穿着 西装 的 男人 和 一个 穿着 黑色 外套 的 男人 走 在 道路 上 </EOS> 一个 穿着 西装 的 男人 和 一个 穿着 黑色 外套 的 男人 站 在 道路 上 </EOS> 不知道作者是的结果怎么训练出来的,太神奇了,没有出现过裙子就。 @chenyuntc
@Canadalynx ,我20个epoch的结果是 一个 戴着 墨镜 的 男人 和 一个 穿着 黑色 外套 的 男人 走 在 道路 上 一个 穿着 西装 的 男人 和 一个 穿着 黑色 外套 的 男人 走 在 道路 上 一个 穿着 西装 的 男人 和 一个 穿着 黑色 外套 的 男人 站 在 道路 上 不知道作者是的结果怎么训练出来的,太神奇了,没有出现过裙子就。 @chenyuntc 我感觉把图像特征放在第一个输入的向量,后面输入全是caption。模型其实根本不知道图里有啥吧。感觉有点类似小学的时候,老师给个开头,让造个句子差不多。但是作者10个epoch训练出的竟然符合图片。我也很好奇我们跑的和作者跑的有啥区别。。。
作者给的代码只有一个epoch,所以有点怀疑作者是不是为了简单,删去了什么东西?
大佬们可以给个完整的代码吗?发个pull request吧
python -m visdom.server执行的网页显示结果,有个显示的三句话的窗口,感觉就没怎么变过,这到底是怎么回事呢?
我直接下的作者训练好的模型:照demo.ipynb里面运行结果 一个 穿着 西装 的 男人 和 一个 穿着 裙子 的 女人 站 在 道路 上 </EOS> 一个 穿着 西装 的 男人 搂 着 一个 穿着 裙子 的 女人 站 在 道路 上 </EOS> 一个 穿着 西装 的 男人 和 一个 穿着 黑色 裤子 的 女人 站 在 道路 上 </EOS>