Closed onozuka777 closed 2 years ago
@onozuka777 さま
ご質問ありがとうございます。
186 s = nts(s, "ascii", "strict") --> 187 n = int(s.strip() or "0", 8) 188 except ValueError:
と書かれていてascii?が気になりました。
あとは、usr/local/anaconda3/envs/37prod/環境である点が気になりました。
本書の第7章は文章を扱っており、文字コードはutf-8でUbuntuでの動作を前提にしています。
「実行環境がWindows系のマシンで、文字コード系のなにかにひっかかっていることはないだろうか?」 と気になったのですが、その点はいかがでしょうか?
小川先生、お忙しい中お答えいただき、ありがとうございます。 環境なのですが、会社のubuntuを用いております。 ただ、複数の人が入れるように、 Jupyter Hubを使って、WIndowsからプログラムを使っております。 第7章の最初に環境をmakeする部分は、そのJupyter Hubから構築しました。 Windowsが関係しているとすると、このサーバをSAMBAでWindowsからもファイルのやり取りができるようにしている ことです。ただ、今回のプログラムに関してはWIndows側からSAMBAでファイルを送るようなことはしておりません。 SAMBAにしていることは何か関係あるか、こうなるとこちらの問題なのかもしれませんが、ご存じであれば ご教示いただけますと幸いです。 お手数おかけします。 何卒、よろしくお願い申し上げます。
@onozuka777 さま
状況の情報をありがとうございます。 会社環境ですと、なかなかいろいろ面倒で大変な点は多いですね。
今回のエラーを見ていると、
train_dl, val_dl, test_dl, TEXT = get_IMDb_DataLoaders_and_TEXT( ----> 6 max_length=256, batch_size=24)
が最初のエラー箇所で、
それは
/utils/dataloader.pyにある、get_IMDb_DataLoaders_and_TEXT(max_length, batch_size)関数であり、
115 # torchtextで単語ベクトルとして英語学習済みモデルを読み込みます --> 116 english_fasttext_vectors = Vectors(name='data/wiki-news-300d-1M.vec')
がひっかかっているようですね。
この 「data/wiki-news-300d-1M.vec」のファイルを用意し、フォルダ「data」に格納済みという認識で合っていますか?
小川先生、ご返事が遅れてしまって大変すみません。上記、映っていたら良いのですが、SAMBAでWindows側から見たdataフォルダの中ですが、data/wiki-news-300d-1M.vec は確かにあるように見えます。このファイルが正しいものかどうかを判断する方法ってあるかどうかご存知でしょうか。 お手数をおかけします。何卒、よろしくお願い申し上げます。
@onozuka777 さま
とても丁寧にありがとうございます。 キャプチャも助かります。
見る限り、ファイルは存在しますね。
なかなか、環境が特殊で難しいですが、 ファイルが大きいので、zip解凍に失敗した可能性などもなくはないのですが、、、 うまくいかず、もどかしいとは思いますが、少しずつ、問題の範囲を狭めたいと思います。
ひとまず、 [1] 7-5 7-5_IMDb_Dataset_DataLoader.ipynb (linkはこちら) は動作しているという認識でよろしいでしょうか?
[2] 続いて、エラーと絡んでいそうな場所のみを抜き出し、以下のみをJupyter Notebookで新たに実行した場合、
import math
import numpy as np
import random
import torch
import torch.nn as nn
import torch.nn.functional as F
import torchtext
from utils.dataloader import get_IMDb_DataLoaders_and_TEXT
train_dl, val_dl, test_dl, TEXT = get_IMDb_DataLoaders_and_TEXT(max_length=256, batch_size=24)
# ミニバッチの用意
batch = next(iter(train_dl))
# 入出力
x = batch.Text[0]
print("入力のテンソルサイズ:", x.shape)
を実行するとどうなるか、教えていただけますでしょうか。
小川先生
ご連絡ありがとうございます。 7-5_IMDb_Dataset_DataLoaderのファイルはワーニングは沢山でましたが、最後まで行きました。 いただいた上記のスクリプトも、ワーニングは沢山でましたが、
入力のテンソルサイズ: torch.Size([24, 256]) という回答が返ってきました。 何か、他に思い当たるところはあるでしょうか。 お手数をおかけしてすみません。 何卒、よろしくお願い申し上げます。
@onozuka777 さま
早速ありがとうございます。
元々
x = batch.Text[0] x1 = net1(x) # 単語をベクトルに print("入力のテンソルサイズ:", x.shape) print("出力のテンソルサイズ:", x1.shape) の部分で、 以下のようなエラーが出ました。(以下、エラー全文)
でしたので、
x側は問題ないと分かりました。x1側を確かめたいです。
では、上記に続いて、
(セル2)
class Embedder(nn.Module):
'''idで示されている単語をベクトルに変換します'''
def __init__(self, text_embedding_vectors):
super(Embedder, self).__init__()
self.embeddings = nn.Embedding.from_pretrained(
embeddings=text_embedding_vectors, freeze=True)
# freeze=Trueによりバックプロパゲーションで更新されず変化しなくなります
def forward(self, x):
x_vec = self.embeddings(x)
return x_vec
(セル3)
# モデル構築
net1 = Embedder(TEXT.vocab.vectors)
(セル4)
# 入出力
x = batch.Text[0]
print("入力のテンソルサイズ:", x.shape)
x1 = net1(x) # 単語をベクトルに
print("出力のテンソルサイズ:", x1.shape)
と続けると、どこでエラーになりますでしょうか?また、どのようなエラーメッセージがでますでしょうか?
小川先生
ご連絡いただき、ありがとうございます。 セル4までいけて、下記がプリントされました。
入力のテンソルサイズ: torch.Size([24, 256]) 出力のテンソルサイズ: torch.Size([24, 256, 300])
お手数をおかけします。 何卒、よろしくお願い申し上げます。
@onozuka777 さま
ありがとうございます。
本Issueの一番最初、
ミニバッチの用意 batch = next(iter(train_dl))
モデル構築 net1 = Embedder(TEXT.vocab.vectors)
入出力 x = batch.Text[0] x1 = net1(x) # 単語をベクトルに
print("入力のテンソルサイズ:", x.shape) print("出力のテンソルサイズ:", x1.shape)
の部分で、 以下のようなエラーが出ました。(以下、エラー全文)
でしたが、これは上のコメントでの
x1 = net1(x) # 単語をベクトルに
print("出力のテンソルサイズ:", x1.shape)
を試していただくと、今度はエラーなく
入力のテンソルサイズ: torch.Size([24, 256]) 出力のテンソルサイズ: torch.Size([24, 256, 300])
が出力され、なぜか問題は解決された?で合っていますか?
小川先生、ご連絡が遅れてしまい大変申し訳ありません。 該当するjupyter notebookがなぜか開けなくなってしまい、しかたがないので、このgithubから再度ダウンロードして動かしたところ、問題なく動きました。動かなかった根本的な原因はよく分からないのですが、やはり我々の環境に一因があるのかもしれません。いずれにしましても、問題は解決いたしました。 1つ1つ丁寧に教えていただき、ありがとうございました。 本件、closeで大丈夫です。 また何かあった時は何卒、よろしくお願い申し上げます。
@onozuka777 さま
ご連絡ならびにご報告をいただき、誠にありがとうございます。
会社環境ですと、いろいろ難しいものがありますね。 私も勉強になりました。
Issueは閉じておきます。
最後の報告まで、ありがとうございました!
小川先生
楽しく拝読しております。 第7章の
'''
動作確認
前節のDataLoaderなどを取得
from utils.dataloader import get_IMDb_DataLoaders_and_TEXT train_dl, val_dl, test_dl, TEXT = get_IMDb_DataLoaders_and_TEXT( max_length=256, batch_size=24)
ミニバッチの用意
batch = next(iter(train_dl))
モデル構築
net1 = Embedder(TEXT.vocab.vectors)
入出力
x = batch.Text[0] x1 = net1(x) # 単語をベクトルに
print("入力のテンソルサイズ:", x.shape) print("出力のテンソルサイズ:", x1.shape)
の部分で、 以下のようなエラーが出ました。(以下、エラー全文) '''
'''
ValueError Traceback (most recent call last) /usr/local/anaconda3/envs/37prod/lib/python3.7/tarfile.py in nti(s) 186 s = nts(s, "ascii", "strict") --> 187 n = int(s.strip() or "0", 8) 188 except ValueError:
ValueError: invalid literal for int() with base 8: 'q\tX\x01'
During handling of the above exception, another exception occurred:
InvalidHeaderError Traceback (most recent call last) /usr/local/anaconda3/envs/37prod/lib/python3.7/tarfile.py in next(self) 2286 try: -> 2287 tarinfo = self.tarinfo.fromtarfile(self) 2288 except EOFHeaderError as e:
/usr/local/anaconda3/envs/37prod/lib/python3.7/tarfile.py in fromtarfile(cls, tarfile) 1094 buf = tarfile.fileobj.read(BLOCKSIZE) -> 1095 obj = cls.frombuf(buf, tarfile.encoding, tarfile.errors) 1096 obj.offset = tarfile.fileobj.tell() - BLOCKSIZE
/usr/local/anaconda3/envs/37prod/lib/python3.7/tarfile.py in frombuf(cls, buf, encoding, errors) 1036 -> 1037 chksum = nti(buf[148:156]) 1038 if chksum not in calc_chksums(buf):
/usr/local/anaconda3/envs/37prod/lib/python3.7/tarfile.py in nti(s) 188 except ValueError: --> 189 raise InvalidHeaderError("invalid header") 190 return n
InvalidHeaderError: invalid header
During handling of the above exception, another exception occurred:
ReadError Traceback (most recent call last) /usr/local/anaconda3/envs/37prod/lib/python3.7/site-packages/torch/serialization.py in _load(f, map_location, pickle_module, **pickle_load_args) 594 try: --> 595 return legacy_load(f) 596 except tarfile.TarError:
/usr/local/anaconda3/envs/37prod/lib/python3.7/site-packages/torch/serialization.py in legacy_load(f) 505 --> 506 with closing(tarfile.open(fileobj=f, mode='r:', format=tarfile.PAX_FORMAT)) as tar, \ 507 mkdtemp() as tmpdir:
/usr/local/anaconda3/envs/37prod/lib/python3.7/tarfile.py in open(cls, name, mode, fileobj, bufsize, kwargs) 1590 raise CompressionError("unknown compression type %r" % comptype) -> 1591 return func(name, filemode, fileobj, kwargs) 1592
/usr/local/anaconda3/envs/37prod/lib/python3.7/tarfile.py in taropen(cls, name, mode, fileobj, kwargs) 1620 raise ValueError("mode must be 'r', 'a', 'w' or 'x'") -> 1621 return cls(name, mode, fileobj, kwargs) 1622
/usr/local/anaconda3/envs/37prod/lib/python3.7/tarfile.py in init(self, name, mode, fileobj, format, tarinfo, dereference, ignore_zeros, encoding, errors, pax_headers, debug, errorlevel, copybufsize) 1483 self.firstmember = None -> 1484 self.firstmember = self.next() 1485
/usr/local/anaconda3/envs/37prod/lib/python3.7/tarfile.py in next(self) 2298 elif self.offset == 0: -> 2299 raise ReadError(str(e)) 2300 except EmptyHeaderError:
ReadError: invalid header
During handling of the above exception, another exception occurred:
RuntimeError Traceback (most recent call last)