yutaroogawa / pytorch_advanced Goto Github PK
View Code? Open in Web Editor NEW書籍「つくりながら学ぶ! PyTorchによる発展ディープラーニング」の実装コードを配置したリポジトリです
License: MIT License
書籍「つくりながら学ぶ! PyTorchによる発展ディープラーニング」の実装コードを配置したリポジトリです
License: MIT License
初めまして。表題の件に関しまして、二点ほど質問がございます。
S_k = S_min + (S_max - S_min)*(k-1) / (m-1)
(m; 特徴マップの数、k は1~mの整数、S_min = 0.2, S_max = 0.9)
と書かれていて、画像サイズ (300*300) に対する相対座標系で全て記述できるように思います。
一方、本書の実装では、予め min_size と max_size を規定した上で画像サイズ 300 で割るという実装になっていますが、これには何か意図がございますか?
また、DBox の中心座標に関しても、f_k として feature_size の値をそのまま採用すれば特徴量マップの各pixelの中心座標がとれ、原著論文もそのような記述であるように思うのですが、同様の実装になっている点も併せてご回答いただけると幸いです。
S'k = sqrt(S_k*S(k+1))
これが定義できないように思うのですが、これに関してご教授いただけると幸いです。原著論文にも何も書かれておりませんので。。。
以上、よろしくお願いいたします。
【場所】【2-2-3_Dataset_DataLoader.ipynb】初版:p.71 **コード部分
【訂正】
# 画像の読み込み OpenCVを使用
ind = 1
image_file_path = train_img_list[ind]
↓
# 画像の読み込み OpenCVを使用
ind = 1
image_file_path = val_img_list[ind]
val_img_list[ind]と書くところが、train_img_list[ind]になっていました。
申し訳ございません。
場所】初版:p.267、図5.3.2、p.270、図5.3.3
【訂正】
サイズ表記
C╳W╳H
↓
C╳H╳W
テンソルサイズは(チャネル数×高さ×幅)です。
C╳H╳Wと記載すべきところが、C╳W╳Hになっていました。
申し訳ございません。
・accuracy計算:
分子の正解数epoch_correctsをdoubleにしておられる理由を教えてください。
チュートリアルもdoubleでした。
下記、doubleしないほうが良いと考えています。
epoch_acc = running_corrects / dataset_sizes[phase]
お世話になります。
第1章P8のclassifierモジュールの出力数に関する記述が謝っていると思われますのでご確認いただければと思います。
【指摘箇所】
最初の全結合層は入力の要素数が25,088、出力数が409です。
↓
最初の全結合層は入力の要素数が25,088、出力数が4096です。
【場所】
【訂正】
格助詞「に」が抜けているようです。
誤)
Step3の出力(475×475)の配列をもとの画像の大きさ戻す
正)
Step3の出力(475×475)の配列をもとの画像の大きさに戻す
場所:【第7章】make_folders_and_data_downloads.ipynb
の以下のセル。
# word2vecの日本語学習済みモデル(東北大学 乾・岡崎研究室)をダウンロード。時間が15分ほどかかります
url = "http://www.cl.ecei.tohoku.ac.jp/~m-suzuki/jawiki_vector/data/20170201.tar.bz2"
save_path = "./data/20170201.tar.bz2"
if not os.path.exists(save_path):
urllib.request.urlretrieve(url, save_path)
東北大学 乾・岡崎研究室のサイトが落ちていて、19年8月25日(08:30)現在つながりません。
サイトが復帰するまで待つしかない状況です。
※ http://www.cl.ecei.tohoku.ac.jp/
は2019年3月以前のアーカイブです
※ 2019年3月移行の移動先のhttps://www.nlp.ecei.tohoku.ac.jp/
もつながりませんね。
【場所】
初版:p.85
【訂正】
格助詞「を」が抜けているようです。
誤)
図2.4.1のモジュールvggを実装する関数make_extras実装します。
正)
図2.4.1のモジュールvggを実装する関数make_extrasを実装します。
【場所】
【訂正】
格助詞「に」が抜けているようです。
誤)
クラス
Dataset
を作成するあたり
正)
クラス
Dataset
を作成するにあたり
対象ファイル:1-3_transfer_learning.ipynb
学習の途中でエラーが発生します。
どう対応すれば良いでしょうか?
UnboundLocalError: local variable 'photoshop' referenced before assignment
File "train.py", line 416, in <module>
trained_net = train_model(net, dataloaders_dict, criterion, optimizer, num_epochs=num_epochs)
File "train.py", line 368, in train_model
for inputs, labels in tqdm(dataloaders_dict[phase]):
File "/anaconda/envs/py36/lib/python3.6/site-packages/tqdm/_tqdm.py", line 1005, in __iter__
for obj in iterable:
File "/anaconda/envs/py36/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 560, in __next__
batch = self.collate_fn([self.dataset[i] for i in indices])
File "/anaconda/envs/py36/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 560, in <listcomp>
batch = self.collate_fn([self.dataset[i] for i in indices])
File "train.py", line 245, in __getitem__
img = Image.open(img_path) # [高さ][幅][色RGB]
File "/anaconda/envs/py36/lib/python3.6/site-packages/PIL/Image.py", line 2690, in open
im = _open_core(fp, filename, prefix)
File "/anaconda/envs/py36/lib/python3.6/site-packages/PIL/Image.py", line 2676, in _open_core
im = factory(fp, filename)
File "/anaconda/envs/py36/lib/python3.6/site-packages/PIL/JpegImagePlugin.py", line 783, in jpeg_factory
im = JpegImageFile(fp, filename)
File "/anaconda/envs/py36/lib/python3.6/site-packages/PIL/ImageFile.py", line 103, in __init__
self._open()
File "/anaconda/envs/py36/lib/python3.6/site-packages/PIL/JpegImagePlugin.py", line 373, in _open
handler(self, i)
File "/anaconda/envs/py36/lib/python3.6/site-packages/PIL/JpegImagePlugin.py", line 139, in APP
self.info["photoshop"] = photoshop
UnboundLocalError: local variable 'photoshop' referenced before assignment
【場所】
初版:p.23
【訂正】
本文中にある変数名label
がlable
になっています。
誤)
ハチの場合はlableを1とします
正)
ハチの場合はlabelを1とします
【場所】
【訂正】
「大きくなる」の「く」が抜けているようです。
誤)
しかしながら、実際には深いネットワークの方が浅いネットワークよりも訓練誤差が大きなる現象が発生することがあり
正)
しかしながら、実際には深いネットワークの方が浅いネットワークよりも訓練誤差が大きくなる現象が発生することがあり
TensorBoardX.ipynbを実行したところ、エラーが出てしまいました。
torch=1.2.0
tensorflow=1.14
tensorboardx=1.8
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-3-cd7a37fd2d55> in <module>()
13 # 4. OpenPoseのインスタンスnetに対して、ダミーデータである
14 # dummy_imgを流したときのgraphをwriterに保存させます
---> 15 writer.add_graph(net, (dummy_img, ))
16 writer.close()
17
~/anaconda3/envs/pytorch_p36/lib/python3.6/site-packages/tensorboardX/writer.py in add_graph(self, model, input_to_model, verbose, **kwargs)
695 print('add_graph() only supports PyTorch v0.2.')
696 return
--> 697 self._get_file_writer().add_graph(graph(model, input_to_model, verbose, **kwargs))
698 else:
699 # Caffe2 models do not have the 'forward' method
~/anaconda3/envs/pytorch_p36/lib/python3.6/site-packages/tensorboardX/pytorch_graph.py in graph(model, args, verbose, **kwargs)
324 if verbose:
325 print(graph)
--> 326 list_of_nodes, node_stats = parse(graph, args, omit_useless_nodes)
327 # We are hardcoding that this was run on CPU even though it might have actually
328 # run on GPU. Note this is what is shown in TensorBoard and has no bearing
~/anaconda3/envs/pytorch_p36/lib/python3.6/site-packages/tensorboardX/pytorch_graph.py in parse(graph, args, omit_useless_nodes)
209
210 if i < n_inputs:
--> 211 nodes_py.append(NodePyIO(node, 'input'))
212 else:
213 nodes_py.append(NodePyIO(node)) # parameter
~/anaconda3/envs/pytorch_p36/lib/python3.6/site-packages/tensorboardX/pytorch_graph.py in __init__(self, node_cpp, input_or_output)
61 class NodePyIO(NodePy):
62 def __init__(self, node_cpp, input_or_output=None):
---> 63 super(NodePyIO, self).__init__(node_cpp, methods_IO)
64 try:
65 tensor_size = node_cpp.type().sizes()
~/anaconda3/envs/pytorch_p36/lib/python3.6/site-packages/tensorboardX/pytorch_graph.py in __init__(self, node_cpp, valid_methods)
56
57 else:
---> 58 setattr(self, m, getattr(node_cpp, m)())
59
60
AttributeError: 'torch._C.Value' object has no attribute 'uniqueName'
またpip install tensorflowでは競合エラーが出てそのままインストールできなかったため、
pip install tensorflow==1.12
pip install tensorflow==1.14
両方でインストールを試してみました(同じエラーが出てしまいましたが)。
tensorflowとtorchのバージョン依存性じゃないかと疑ってます。。
実行成功時のpytorch, tensorflow, tensorboardxのバージョン情報など伺って良いでしょうか?
お世話になります。非常に細かい箇所なのですが、
初版 p 23の
target_path = osp.join(root_path+phase+'/**/*.jpg')
の部分なのですが、
osp.join(=os.path.join)はカンマ区切りでパスをつなげる使い方が一般的だと思うので、
target_path = osp.join(root_path,phase) + '/**/*.jpg'
の方が自然かなと感じました。
*好みが分かれる所だと思うので、修正のご判断はお任せ致します。
[6]
ILSVRC_class_index = json.load(open('./data/imagenet_class_index.json', 'r'))
ILSVRC_class_index
==
dataフォルダを見ても犬のファイル(goldenretriever-3724972_640.jpg)しか置いてないので、添付し忘れでしょうか?
ダウンロードしたコードを実行してもエラーとなります。
よろしくお願いします。
ちょっとした疑問なのですが。。
配布コードでは
def make_vgg():
layers = []
in_channels = 3 # 色チャネル数
# vggモジュールで使用する畳み込み層やマックスプーリングのチャネル数
cfg = [64, 64, 'M', 128, 128, 'M', 256, 256,
256, 'MC', 512, 512, 512, 'M', 512, 512, 512]
とceil=TrueのMaxPoolingレイヤを挟んでおりますが、torchvisionのモデルをみると全てのMaxpool2dはceil=Falseになっているようです。
特定レイヤだけceil=Trueにした理由などあるのでしょうか?
print(models.vgg16())
VGG(
(features): Sequential(
(0): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
(2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(3): ReLU(inplace)
(4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(5): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(6): ReLU(inplace)
(7): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(8): ReLU(inplace)
(9): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(10): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(11): ReLU(inplace)
(12): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(13): ReLU(inplace)
(14): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(15): ReLU(inplace)
(16): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(17): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(18): ReLU(inplace)
(19): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(20): ReLU(inplace)
(21): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(22): ReLU(inplace)
(23): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
(24): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(25): ReLU(inplace)
(26): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(27): ReLU(inplace)
(28): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(29): ReLU(inplace)
(30): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
Resnetの部分について質問です。原著論文ではfeature_dilated_res_1, feature_dilated_res_2のstrideは2であり、https://github.com/hszhao/semseg/blob/master/model/resnet.pyでもstride 2で作成されていましたが、あえてここのstrideを変更された理由がありましたらご教授いただけると幸いです。あるいは自分、何かを勘違いしているのでしょうか...
※pytorch_tutorialで理解しました。回答不要です。削除方法がわからず追記しました。申し訳ございません。
kerasからpytorchへ移行中の初心者です。
質問パート:第1章、P20、calss_ImageTransform()
質問箇所:def init(self, resize, mean, sed):
self.data_transform={・・・
質問1:
'train': でオーギュメンテーション非実施の場合は
'test':と同じく、Composeでまずtransforms.Resizeから始めようと考えていますが、
問題ないでしょうか?
質問2:
'test':同様に、'train'でオーギュメンテーション非実施の場合、cropも不要と思いますが、
問題ございませんでしょうか?
お手すきの際、ご回答をお願いします。
お世話になります.
【場所】
初版:p.94
【訂正】
下記、BBoxのcxとcyを計算する箇所で、コードの記載が間違っているように思います。
こちらの勘違いでしたら申し訳ありません。
誤)
dbox_list[:, :2] + loc[:, :2] * 0.1 * dbox_list[:, 2:]
cx=cx_d+Δcx * 0.1 * w
cy=cy_d+Δcy * 0.1 * h
正)
dbox_list[:, :2] + loc[:, :2] * 0.1 * dbox_list[:, :2]
cx=cx_d+Δcx * 0.1 * cx_d
cy=cy_d+Δcy * 0.1 * cy_d
PAFsのリンクの数が37本とありますが、19本の間違いじゃないでしょうか。
PAFsには、2点を結ぶベクトルの単位ベクトルが格納されるかと思います。
各リンク、単位ベクトルx方向と、単位ベクトルy方向を作成するので、1つのリンクにつき、2つのチャネルが割り当てられます。なので、チャンネル数は合計38(19×2)になるかと思います。P.186にリンクの図がありますが、この図に加えて、「右耳-右肩」、「左耳-左肩」の2本を加えて合計19本のリンク数になるかなと。
アノテーション作成のソースコードdataloader.pyのget_ground_truth関数を確認しましたが、pafsの配列(mid_1とmid_2)の作成では19個のリンクを作成しているようにみえます。
また、putVecMaps関数で、各リンクで、単位ベクトルのx方向とy方向と2つの配列を作成しているようにみえました。
こちらの勘違いでしたら申し訳ありませんが、確認したく質問させていただきました。
【場所】
【訂正】
Jupyter Notebookのファイル拡張子が、.ipynb
ではなく.pynb
になっています。
お世話になります.
【場所】
初版:p.373
【訂正】
位置情報テンソルの計算式が書籍の説明と書籍中のサンプルコードで異なっていました.原著論文や参考サイトを当たったところ,どうやらサンプルコードの方が正しいようです.
誤)
PE(pos_word, 2i) = sin(pos_word / (1000^(2i/DIM)))
PE(pos_word, 2i + 1) = cos(pos_word / (1000^(2i/DIM)))
正)
PE(pos_word, 2i) = sin(pos_word / (10000^(2i/DIM)))
PE(pos_word, 2i + 1) = cos(pos_word / (10000^(2i/DIM)))
ご確認いただければ幸いです.
【場所】
【訂正】
図3.1.1ではインプット画像とセグメンテーション結果の画像が縦に並んでいるのですが、本文中は横に並んでいることが前提の表現になっています。
誤) p.132
図3.1.1右側のような画像になります
そこで図3.1.1右側ではカラーパレット形式と呼ばれる画像表現手法を使用しています
正) ※ 本文の方を修正する場合
図3.1.1下側のような画像になります
そこで図3.1.1下側ではカラーパレット形式と呼ばれる画像表現手法を使用しています
小川様。こんばんは。
「PyTorchによる発展ディープラーニング」を用いて学習している者です。
コード内で理解できないコードなどに関して質問サイトなどで質問したいと考えているのですが、その際に書籍に記載されているコードを質問自体に記載しても宜しいのでしょうか?
from torchtext.vocab import Vectors
english_fasttext_vectors = Vectors(name='data/wiki-news-300d-1M.vec')
print("1単語を表現する次元数:", english_fasttext_vectors.dim)
print("単語数:", len(english_fasttext_vectors.itos))
上記コードを実行すると下記エラーが出ます。
RuntimeError: no vectors found at .vector_cache/data/wiki-news-300d-1M.vec
ちなみにpytorchのversion1.3.1です。
【場所】p.141 「DataLoaderの作成」コードの最後の2行
【訂正】
プログラム自体は間違ってないと思いますが, コメントのサイズが間違えているかと思います.
print(imges.size()) # torch.Size([8, 3, 300, 300])
print(anno_class_imges.size()) # torch.Size([8, 3, 300, 300])
↓
print(imges.size()) # torch.Size([8, 3, 475, 475])
print(anno_class_imges.size()) # torch.Size([8, 475, 475])
非常にわかりやすい本をありがとございます.
よろしくお願いいたします.
【場所】p.90 「2-4-5_SSD_model_forward.ipynb」コードのDBoxのサイズのコメント文
および、./utils/ssd_model.pyの465 lineのコメント文
【訂正】
コメント文に記載のDBoxのサイズが間違っていました。
ご指摘いただき、誠にありがとうございます。
(コメント文)
アスペクト比1の大きいDBox [cx,cy, width, height]
'max_sizes': [45, 99, 153, 207, 261, 315],
↓
アスペクト比1の大きいDBox [cx,cy, width, height]
'max_sizes': [60, 111, 162, 213, 264, 315],
申し訳ございません。どうぞよろしくお願いいたします。
対象ファイル:1-5_fine_tuning.ipynb
ファイルの最後にある、
ーーーーー
# PyTorchのネットワークパラメータのロード
load_path = './weights_fine_tuning.pth'
load_weights = torch.load(load_path)
net.load_state_dict(load_weights)
ーーーーー
を実行すると、
IncompatibleKeys(missing_keys=[], unexpected_keys=[])
と出力されます。
・この出力は何でしょうか?どう対応したらよいでしょうか?
どうぞよろしくお願いいたします。
書籍P85の実装では畳込みのチャネル数がcfg = [256, 512, 128, 256, 128, 256, 128, 256]
となっていますが、図2.4.1では6回目と8回目の出力チャネル数は512と表記されています。
どちらが正しいでしょうか?
また、図2.4.1のモジュールextraでは畳込み層の後にReLU層がありますが、書籍P85の実装ではReLU層がありません。
これは、実装が間違えていますか?
以上2点についてよろしくお願いします。
対象ファイル:1-1_load_vgg.ipynb
VGG-16モデルをロードすると、書籍では「ネットワークは (features)と(classifier)の2つから構成されています。」と説明されていますが、 (features)と(classifier)の間に(avgpool)があり、3つから構成されています。
・第1章を進めるうえで、この違いは問題になりますでしょうか?
・この (avgpool): AdaptiveAvgPool2d(output_size=(7, 7))は何でしょうか?
どうぞよろしくお願いいたします。
ーー【print(net)の出力結果】ーーーーーーー
VGG(
(features): Sequential(
(0): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
(1): ReLU(inplace)
・・・
(29): ReLU(inplace)
(30): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
)
(avgpool): AdaptiveAvgPool2d(output_size=(7, 7))
(classifier): Sequential(
(0): Linear(in_features=25088, out_features=4096, bias=True)
(1): ReLU(inplace)
(2): Dropout(p=0.5)
(3): Linear(in_features=4096, out_features=4096, bias=True)
(4): ReLU(inplace)
(5): Dropout(p=0.5)
(6): Linear(in_features=4096, out_features=1000, bias=True)
)
)
ーーーーーーーーー
【場所】
【訂正】
挙動が「不安的」とあるのですが、「不安定」ではないでしょうか。
(こういう表現でしたらすみません)
誤)
しかしながら8個ではデータ数が少ないため、バッチノーマライゼーションの挙動が不安的になります。
正)
しかしながら8個ではデータ数が少ないため、バッチノーマライゼーションの挙動が不安定になります。
【場所】初版:p.267の3行目、テンソルサイズは(クラス数×高さ×幅)です。
【訂正】
テンソルサイズは(クラス数×高さ×幅)です。
↓
テンソルサイズは(チャネル数×高さ×幅)です。
チャネル数と書くところが、クラス数になっていました。
申し訳ございません。
1-3_transfer_learning.ipynb
の30ページ、学習・検証の実行の以下の部分でAttributeErrorが発生します
# 学習・検証を実行する
num_epochs=2
train_model(net, dataloaders_dict, criterion, optimizer, num_epochs=num_epochs)
具体的なエラーは以下です
0%| | 0/5 [00:00<?, ?it/s]Epoch 1/2
-------------
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-19-4231a11ffbf9> in <module>()
1 num_epochs=2
----> 2 train_model(net, dataloaders_dict, criterion, optimizer, num_epochs=num_epochs)
4 frames
<ipython-input-18-43774a7b55c1> in train_model(net, dataloaders_dict, criterion, optimizer, num_epochs)
31 with torch.set_grad_enabled(phase == 'train'):
32 outputs = net(inputs)
---> 33 loss = criterion(outputs, labels) # 損失を計算
34 _, preds = torch.max(outputs, 1) # ラベルを予測
35
/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py in __call__(self, *input, **kwargs)
491 result = self._slow_forward(*input, **kwargs)
492 else:
--> 493 result = self.forward(*input, **kwargs)
494 for hook in self._forward_hooks.values():
495 hook_result = hook(self, input, result)
/usr/local/lib/python3.6/dist-packages/torch/nn/modules/loss.py in forward(self, input, target)
940 def forward(self, input, target):
941 return F.cross_entropy(input, target, weight=self.weight,
--> 942 ignore_index=self.ignore_index, reduction=self.reduction)
943
944
/usr/local/lib/python3.6/dist-packages/torch/nn/functional.py in cross_entropy(input, target, weight, size_average, ignore_index, reduce, reduction)
2054 if size_average is not None or reduce is not None:
2055 reduction = _Reduction.legacy_get_string(size_average, reduce)
-> 2056 return nll_loss(log_softmax(input, 1), target, weight, None, ignore_index, None, reduction)
2057
2058
/usr/local/lib/python3.6/dist-packages/torch/nn/functional.py in nll_loss(input, target, weight, size_average, ignore_index, reduce, reduction)
1865 raise ValueError('Expected 2 or more dimensions (got {})'.format(dim))
1866
-> 1867 if input.size(0) != target.size(0):
1868 raise ValueError('Expected input batch_size ({}) to match target batch_size ({}).'
1869 .format(input.size(0), target.size(0)))
AttributeError: 'tuple' object has no attribute 'size'
input
かtarget
がタプルになっているのが原因だと思うのですが、どうしたら良いでしょうか?
Jupyter Notebookと書くべきところをAnacondaと記載しているように思われます。
【誤】図1.4.20のようにAnacondaが立ち上がります。あとは手元のPCでAnacondaを使用するのと同じ操作です。
【正】図1.4.20のようにJupyter Notebookが立ち上がります。あとは手元のPCでJupyter Notebookを使用するのと同じ操作です。
【誤】なお手元のPCからEC2サーバへファイルをアップロードしたり、逆にファイルをダウンロードしたりするのもAnacondaの「Download」や「Upload」ボタンから可能です。
【正】なお手元のPCからEC2サーバへファイルをアップロードしたり、逆にファイルをダウンロードしたりするのもJupyter Notebookの「Download」や「Upload」ボタンから可能です。
【誤】図 1.4.20 手元のPCのブラウザからAnacondaを起動
【正】図 1.4.20 手元のPCのブラウザからJupyter Notebookを起動
【誤】Anacondaを起動する方法について解説しました。
【正】Jupyter Notebookを起動する方法について解説しました。
P352の前処理で、gensimのインストールで綴りが間違っているようです。
【誤】pip install genism
【正】pip install gensim
対象ファイル:3-8_PSPNet_inference.ipynb
ファイルの最後にある、推論実行のセルを実行した際に、推論結果の画像が書籍と異なる結果になります。
※書籍では馬はピンク色ですが、馬が黄緑色になるなど
・どう対応したらよいでしょうか?
どうぞよろしくお願いいたします。
対象ファイル:4-5_TensorBoardX.ipynb
4-5_TensorBoardX.ipynb
を実行し、
その後ターミナルから、
tensorboard --logdir="./tbX/"
を実行して、port6006でTensorBoardを表示し、ネットワークグラフが描画できました。
ですが、フォントサイズが異なるのか、書籍の図4.5.4などとは異なり、テンソルサイズが見切れています。
・どうしたら、テンソルサイズなどの表示が見切れないですか?
初めまして。
1年ほど前から、機械学習分野の勉強を始めた者です。
ただ、転移学習を行うだけでなく中身のコードを細かく理解したいと思い、
拝読させていただいております。
初歩的なミスの可能性が高く恐縮ですが、以下のエラーについてコメントいただけると幸いです。
【エラー内容】
2-7の最後の”学習・検証を実行する”という部分で、実行を行うと以下のようなエラーが出ました
-入力-
学習・検証を実行する
num_epochs= 50
train_model(net, dataloaders_dict, criterion, optimizer, num_epochs=num_epochs)
-出力(エラー)-
/content/drive/My Drive/pytorch_advanced-master/2_objectdetection/utils/ssd_model.py in pull_item(self, index)
247 image_file_path = self.img_list[index]
248 img = cv2.imread(image_file_path) # [高さ][幅][色BGR]
--> 249 height, width, channels = img.shape # 画像のサイズを取得
250
251 # 2. xml形式のアノテーション情報をリストに
AttributeError: 'NoneType' object has no attribute 'shape'
【試してみたこと】
・pathが通っていないことが原因で、正しくcv2.imreadができていないのではないかと思い
img_listについて調べましたが、img_listは正しく作成されていました。
・2-2, 2-3章では、書籍やコードに書かれている通りの結果が出ていたため、
比較を行い、dataloaders_dictのイタレータ変換など試してみましたが、うまくいきません
でした。
これまで上がっている質問内容の中に、この質問がないことを考えると
おそらく個人的に何か設定等が誤っている可能性が高く、
大変恐縮ですが、お手すきの際コメントいただけると幸いです。
よろしくお願いいたします。
【場所】
初版:p.95
【内容】
本文中の説明でDBoxの数が 8,735
個と記載されているのですが、正しくは8,732
個ではないでしょうか。
(本書の他の箇所の説明では8,732
個になっているのですが、もしこちらの勘違いでしたらすみません)
このような閾値処理をした変数scoresを引数として使用する理由は、8,735個のDBoxに対してNon-Maximum Suppressionを計算すると処理が重くなるからです。
対象ファイル:9-5_ECO_inference.ipynb
def load_pretrained_ECO(model_dict, pretrained_model_dict):
のセルにおいて、
# 学習済みモデルのパラメータを代入
net.eval() # ECOネットワークを推論モードに
net.load_state_dict(new_state_dict)
を実行すると、最後に
IncompatibleKeys(missing_keys=[], unexpected_keys=[])
と出力されます。
・この出力は何でしょうか?どう対応したらよいでしょうか?
どうぞよろしくお願いいたします。
【場所】
初版:図2.4.1
extra部分の出力チャネル数の表記が誤っておりました。
申し訳ございません。
【文面訂正】
(誤り)
図2.4.1 extras部分の出力チャネル数
左から512、256、512、512と記載。
(訂正)
左から512、256、256、256
小川様。初めまして。
「PyTorchによる発展ディープラーニング」を用いて学習している者です。
お忙しいところ大変失礼致します。
3-7章で、Xavierの初期値を使用している理由として「Sigmoid関数がこの後に使われるから」との記述がありますが、本文中でSigmoid関数を実装している箇所が見つけられません。
どの部分で、Sigmoid関数が呼ばれているのでしょうか?
お忙しいところ大変恐縮ですが、ご教示いただきたいです。
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)
in ()
1 from utils.dataloader import get_IMDb_DataLoaders_and_TEXT
2 train_dl, val_dl, test_dl, TEXT = get_IMDb_DataLoaders_and_TEXT(
----> 3 max_length=256, batch_size=24)
4
5 # ミニバッチの用意
/content/pytorch_advanced/7_nlp_sentiment_transformer/utils/dataloader.py in get_IMDb_DataLoaders_and_TEXT(max_length, batch_size)
111 # torchtext.data.Datasetのsplit関数で訓練データとvalidationデータを分ける
112 train_ds, val_ds = train_val_ds.split(
--> 113 split_ratio=0.8, random_state=random.seed(1234))
114
115 # torchtextで単語ベクトルとして英語学習済みモデルを読み込みます
ValueError: not enough values to unpack (expected 2, got 0)
【場所】初版:p. 186の図4.12
【訂正】図4.12の右側のリンク図で、リンク番号38は34の誤植です
申し訳ございません。
【場所】
初版:p.61, 図2.1.3, p.93, p.108
オフセット情報を用いてデフォルトボックス(DBox)をバウンディングボックス(BBox)に変換する式のcxとcyの記述が誤っていました。
申し訳ございません。
【文面訂正】
(誤り)
cx = cx_d (1 + 0.1 Δcx)
cy = cy_d (1 + 0.1 Δcy)
(訂正)
cx = cx_d + 0.1 Δcx * w_d
cy = cy_d + 0.1 Δcy * h_d
【図2.1.3訂正】
右側の図の座標情報
(誤り)
cx_d (1 + 0.1 Δcx)
cy_d (1 + 0.1 Δcy)
w・exp (0.2 Δw)
h・exp (0.2 Δh)
(訂正)
cx_d + 0.1 Δcx * w_d
cy_d + 0.1 Δcy * h_d
w_d・exp (0.2 Δw)
h_d・exp (0.2 Δh)
対象ファイル:8-2-3_bert_base.ipynb.ipynbなど
セル
# state_dictの名前が違うので前から順番に代入する
# 今回、パラメータの名前は違っていても、対応するものは同じ順番になっています
# 現在のネットワークの情報をコピーして新たなstate_dictを作成
new_state_dict = net.state_dict().copy()
# 新たなstate_dictに学習済みの値を代入
for index, (key_name, value) in enumerate(loaded_state_dict.items()):
name = param_names[index] # 現在のネットワークでのパラメータ名を取得
new_state_dict[name] = value # 値を入れる
print(str(key_name)+"→"+str(name)) # 何から何に入ったかを表示
# 現在のネットワークのパラメータを全部ロードしたら終える
if index+1 >= len(param_names):
break
# 新たなstate_dictを実装したBERTモデルに与える
net.load_state_dict(new_state_dict)
を実行すると、最後に
IncompatibleKeys(missing_keys=[], unexpected_keys=[])
と出力されます。
・この出力は何でしょうか?どう対応したらよいでしょうか?
どうぞよろしくお願いいたします。
【場所】初版:図4.1.2の右側(リンク図)、およびその他のリンク数、PAFsの数を37と記載している場所
【訂正】
OpenPoseのリンク数は37本ではなく、19本です。
そして、19本のリンクを求めるためのPAFsについて、
x軸方向、,y軸方向で各ピクセルがリンクである確率度合いをヒートマップ化しているため、その結果38チャネルが出力されます。
リンクは図4.1.2右側(リンク図)で表記したものに加えて、「右耳-右肩」、「左耳-左肩」の2本を足して、19本となります。
こちら詳細は
以下でご指摘いただいた通りです。
【第4章】4.1 P.191 OpenPose PAFsのリンクの数は37本ではなく、19本?
#39
大変大きなミスで読者の皆様にはご迷惑をおかけいたします。
誠に申し訳ございません。
どうぞよろしくお願い致します。
【場所】初版:p.48の実装コード部分
from make_dataset_dataloader import ・・・
【訂正】
# 1.3節で作成したクラスを同じフォルダにあるmake_dataset_dataloader.pyに記載して使用
from make_dataset_dataloader import ImageTransform, make_datapath_list,
HymenopteraDataset
↓
# 1.3節で作成したクラスをフォルダutilsにあるdataloader_image_classification.pyに記載して使用
from utils.dataloader_image_classification import ImageTransform, make_datapath_list, HymenopteraDataset
が正しいimport内容となります。
GitHubのコードは正しいですが、書籍の文面が間違っています。
申し訳ございません。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.