2021年時点 「PyTorchで始める深層学習」の修正点(7章-4)
小泉訓著の「PyTorchで始める深層学習」の7章-5、自分のデータセット画像の分類で修正点がいくつかあったので、ここにメモする。
(2018年の本なので仕方ないことである)
① リスト7-10のtrain画像のパス
本には
と書いてあるが、これではtrainフォルダ内の画像にはアクセスできない。
よって、
と書き換えると良い。
② train画像の種類
trainフォルダにはgifなども混じっている。よって、リスト7-10では
という様に書き換えれば上手くいく。
③ Variableについて
次はエラーでは無いが、pytorchでは
はもう必要無くなっている(depricated)。
よってこれを含むコードは飛ばしてもよい。
(あっても良い)
④lossの書き方
学習の部分で
とあるのだが、以下の様に書き換える必要がある。
以上で画像分類のコードが動く。
2021年時点 「PyTorchで始める深層学習」の修正点(6章-3)
小泉訓著の「PyTorchで始める深層学習」の6章-3、手書き文字の分類で修正点がいくつかあったので、ここにメモする。
(2018年の本なので仕方ないことである)
①
sklearnのdatasetsでmnistデータをダウンロードするコードがあるが、本にあるfetch_mldataはもう使えないらしい。
なのでコードは以下のように書き換えると上手くいく。
②
で得たtrain_y、test_yはobject型であるため、その後の処理
などでエラーとなる。
これの対処法は
object型→numpyのint
に変えておくことだ。
この様なコードを加えると良い。
③
次はエラーでは無いが、pytorchでは
はもう必要無くなっている(depricated)。
よってこれを含むコードは飛ばしてもよい。
(あっても良い)
④
学習の部分で
とあるのだが、以下の様に書き換える必要がある。
以上で手書き文字の認識コードが動く。
sklearnのdatasets.fetch_mldataにおいてのエラー
sklearnのdatasets.fetch_mldataをMNISTなどのデータセットのロードの際、以前は利用していたらしいが、今はエラーとなる。
ものとコード
マシンのマウント先が再起動した際に無くなったとき
あるマシン(pc)の/opt/hdd4t/ ディレクトリの下に4Tのメモリをマウントしていたが、再起動したらマウント先が見れなくなってしまった。
こういった場合の対応を記述する。
まずは現在マウントされているファイルシステムを一覧表示(容量や使用量が単位付きで表示する)
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 16G 0 16G 0% /dev
tmpfs 3.2G 299M 2.9G 10% /run
/dev/sdb2 1.8T 1.6T 87G 95% /
tmpfs 16G 192K 16G 1% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 16G 0 16G 0% /sys/fs/cgroup
/dev/sda1 96M 29M 68M 30% /boot/efi
tmpfs 3.2G 28K 3.2G 1% /run/user/108
tmpfs 3.2G 0 3.2G 0% /run/user/1000
こんな感じの出力を得たが4Tらしきものはない。
(本当は >> /dev/sdc1 3.6T 1.8T 1.7T 53% /opt/hdd4t などとでるはず)
次に
$ lsblk
sda 8:0 0 232.9G 0 disk
├─sda1 8:1 0 100M 0 part /boot/efi
├─sda2 8:2 0 16M 0 part
├─sda3 8:3 0 232.3G 0 part
└─sda4 8:4 0 450M 0 part
sdb 8:16 0 1.8T 0 disk
├─sdb1 8:17 0 512M 0 part
├─sdb2 8:18 0 1.8T 0 part /
└─sdb3 8:19 0 15.9G 0 part
sdc 8:32 0 3.7T 0 disk
└─sdc1 8:33 0 3.7T 0 part
4Tがあった!
これをマウントする。
$ sudo mount /dev/sdc1 /opt/hdd4t/
(sdc1などは/devのしたにある様だ)
これでdf -hでマウントできた事を確認できる。
fstabを使えばrebootしてもつながったままにできる様なので、今度調べる。
Got permission denied while trying to connect to the Docker daemon socket ... permission deniedエラーの対処法
$docker ps
とうつと
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http:~
unix /var/run/docker.sock: connect: permission denied
という様なエラーが出た際の対処法を書く。
これはユーザーがdocker groupというものに入っていないときに出るエラーだ。
docker groupに入れる必要がある。
以下のサイトが参考になる。
https://stackoverflow.com/questions/48957195/how-to-fix-docker-got-permission-denied-issue
要するにやることは
$ sudo groupadd docker
$ sudo usermod -aG docker $USER
($USERは人それぞれ)
自分の場合はログアウトし、もう一度ログインしたらdockerを使えた。
上のサイトには別の方法ものっている。
Amazon Forecastのデータ入手から実行まで
以下のサイトを参考にすれば、データのダウンロードから実行まで行える。
https://dev.classmethod.jp/articles/amazon-forecast-getting-start/
(※UIは変わっている。特にschemaの並び替えは分かりづらいが、左のバーガーのようなアイコンをドラッグできるようになっている。コードからは変更できないようだ(現時点))
TypeError: Expected Ptr<cv::UMat> for argument 'src' エラーの対処法
OpenCVのremap関数を用いた際にこのエラーが出た。
具体的には
warped_img2 = cv2.remap(image1, flow, None, cv2.INTER_LINEAR)
の様なコードだ。
色々調べた結果、入力が間違っている可能性があることがわかった。
自分の場合は例えば
print(flow_up.shape)
の出力は
torch.Size([1, 2, 240, 416])
となっており、pytorchのtensorを入力としてしまっていた。
またC、H、Wの順番も間違っていた。
flow = flow.squeeze().cpu().numpy().transpose(1,2,0)
image1 = image1.squeeze().cpu().numpy().transpose(1,2,0)
を行う事で例えばflowは
(240, 416, 2)
になり、エラーも出なくなった。