#(1) PyTorch installation
(bash) $ conda create -n py37_pytorch python=3.7 anaconda
(bash) $ conda activate py37_pytorch
(py37_pytorch) $ conda install pytorch torchvision -c pytorch
## Package Plan ##
environment location: /home/[username]/.pyenv/versions/anaconda3-5.2.0/envs/py37_pytorch
added / updated specs:
- pytorch
- torchvision
#(2) IPアドレス確認。
$ ip -f inet addr
1: lo: <LOOPBACK,UP,LOWER_UP>
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP>
inet aaa.bb.cc.ddd/ee brd PPP.QQ.RR.SSS scope global noprefixroute eno1
valid_lft forever preferred_lft forever
のように出てくるが、ここでは「aaa.bb.cc.ddd」を覚えておく。
#(3) リモート設定
参考 https://qiita.com/syo_cream/items/05553b41277523a131fd
まず、jupyter用のパスワードを設定する。
(py37_pytorch) $ cd ~/.jupyter/
(py37_pytorch) $ jupyter notebook password
Enter password:
Verify password:
[NotebookPasswordApp] Wrote hashed password to /home/[username]/.jupyter/jupyter_notebook_config.json
(py37_pytorch) $ ls
jupyter_notebook_config.py
jupyter_notebook_config.json
jupyter_notebook_config.pyは、すでに(多分その昔やろうとして失敗した残骸として)あった。
これを編集する。
具体的に書き加えるのは
# これを最初の行に入れる!
c = get_config()
# Notebook上でplotを表示できるようにする [これはまだやっていない。]
# c.IPKernelApp.pylab = 'inline'
# 全てのIPから接続を許可
c.NotebookApp.ip = '*'
# IPython notebookのログインパスワード
c.NotebookApp.password = '[jsonファイルに書かれている
ハッシュ化されたパスワード]'
# 起動時にブラウザを起動させるかの設定
c.NotebookApp.open_browser = False
# ポート指定
c.NotebookApp.port = [接続ポート]
この[接続ポート]は8888がデフォルト。しかし、バッティングしても面倒なので、念のため違う数字にしておいた。
#(4) リモートでjupyter
以上は全てSSH先で行う。最後に、SSH先で
$ jupyter notebook
とやっておく。自分のローカルのパソコンで、ブラウザに
http://aaa.bb.cc.ddd:[接続ポート]
とやると、パスワードを要求されるので、それを入力すると、リモート環境でjupyterが利用できる。
(5) PyTorch
"Deep Learning with PyTorch" (Eli Stevens, Luca Antiga, and Thomas Viehmann)
https://github.com/deep-learning-with-pytorch/dlwpt-code
chapter 2. Pretrained networks
chapter 2.6 Exercises
Feed the image of the golden retriever [shetland sheepdog] into the horse-to-zebra model.
-
What do you need to do to the image to prepare it?
-
What does the output look like?
shetland_sheepdog でGoogle検索して出てきた画像(mv_library_dog_shetland_sheepdog.png)をjpgに変換したあと、horse-to-zebra modelに入れると、「シマウマっぽい模様を持つ犬」になる。
chapter 3.14 Exercises
Create a tensor a from list(range(9)). Predict and then check the size, offset, and stride.
import torch
a = torch.tensor(list(range(9)))
a
# tensor([0, 1, 2, 3, 4, 5, 6, 7, 8])
a.size()
# torch.Size([9])
a.storage_offset()
# 0
a.stride()
# (1,)
a.storage()
# 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# [torch.LongStorage of size 9]
Create a new tensor using b = a.view(3, 3). What does view do? Check that a and b share the same storage.
b = a.view(3, 3)
b
#tensor([[0, 1, 2],
# [3, 4, 5],
# [6, 7, 8]])
b.size()
# torch.Size([3, 3])
b.storage_offset()
# 0
b.stride()
# (3, 1)
id(a.storage)==id(b.storage) ## storageを比較する。
# True
Create a tensor c = b[1:,1:]. Predict and then check the size, offset, and stride.
c = b[1:,1:]
c
# tensor([[4, 5],
# [7, 8]])
c.size()
# torch.Size([2, 2])
c.storage_offset()
4
c.stride()
# (3, 1). ### ここは予想と違った。なるほどである。
id(a.storage)==id(c.storage) # aとcはstorageは同じ。
# True
Pick a mathematical operation like cosine or square root. Can you find a corresponding function in the torch library?
Apply the function element-wise to a. Why does it return an error?
torch.cos(0.)
# --------------------------------------------
# TypeError Traceback (most recent call last)
# <ipython-input-16-191b65904589> in <module>
# ----> 1 torch.cos(0.)
#
# TypeError: cos(): argument 'input' (position 1) must be Tensor, not float
What operation is required to make the function work?
torch.cos(a)
# tensor([ 1.0000, 0.5403, -0.4161, -0.9900, -0.6536, 0.2837, 0.9602, 0.7539,
-0.1455])
Is there a version of your function that operates in place?
これはよくわからない。