【100 PyTorch exercises】 PyTorchを学ぼう 入門編 1~5問目

PyTorchの操作方法はNumpyの操作方法と似ています。

そのためNumpyが使用できれば同じような操作方法でPyTrochも扱えるという学習コストの低さが一つのメリットといえます。

しかし、多少の差異はどうしても存在します。

そこで、Numpyの練習に非常に役立つ「100 numpy exercises 」をPyTorchで書き換えることによって、PyTorchの操作方法を学ぶのと同時にNumpyとの類似点や相違点を学んでいきたいと思います。

github.com

PyTorchのコードだけでなくNumpyのコードもあわせて紹介していきます。

別記事に他の問題の解法も書いています。

次のリンクにまとめているので、他の問題もあわせて参考にしていただければと思います。

venoda.hatenablog.com




1. Import the Pytorch package under the name np (★☆☆)

「npという名前でNumpyをインポートしてください」

PyTorchの場合はtorchという名前でインポートします。

PyTorch

import torch

Numpy

import numpy as np


2. Print the numpy version and the configuration (★☆☆)

「Numpyのバージョンと設定を表示してください」

PyTorchの場合は、PyTorchのバージョンと設定を表示します。

PyTorch

print(torch.__version__)
torch.__config__.show()

Numpy

print(np.__version__)
np.show_config()




3. Create a null vector of size 10 (★☆☆)

「サイズが10の要素がすべて"0"の一次元配列を作ってください」

PyTorch

Z = torch.zeros(10)
print(Z)
# Output
tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])

Numpy

Z = np.zeros(10)
print(Z)
# Output
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]


4. How to find the memory size of any array (★☆☆)

「配列のメモリサイズを求めてください」

PyTorch

Z = torch.zeros((10, 10))
print("%d bytes" % (Z.element_size() * Z.nelement()))
# Output
400 bytes

Numpy

Z = np.zeros((10,10))
print("%d bytes" % (Z.size * Z.itemsize))
# Output
800 bytes




5. How to get the documentation of the numpy add function from the command line? (★☆☆)

コマンドラインからnumpyのadd関数のドキュメントを参照してください」

PyTorch

PyTorchでの出力方法が見つかりませんでした。

Jupyter Notebook上であれば、torch.add?でDocstringに書かれている内容は確認できます。

Numpy

正解には%run ‘python -c "import numpy; numpy.info(numpy.add)"‘となっていましたが、Jupyter Notebook上であれば、次のコマンドで参照することができます。

np.info(np.add)
# Output
add(x1, x2, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj])

Add arguments element-wise.

Parameters
----------
x1, x2 : array_like
    The arrays to be added.
    If ``x1.shape != x2.shape``, they must be broadcastable to a common
    shape (which becomes the shape of the output).
out : ndarray, None, or tuple of ndarray and None, optional
    A location into which the result is stored. If provided, it must have
    a shape that the inputs broadcast to. If not provided or None,
    a freshly-allocated array is returned. A tuple (possible only as a
    keyword argument) must have length equal to the number of outputs.
where : array_like, optional
    This condition is broadcast over the input. At locations where the
    condition is True, the `out` array will be set to the ufunc result.
    Elsewhere, the `out` array will retain its original value.
    Note that if an uninitialized `out` array is created via the default
    ``out=None``, locations within it where the condition is False will
    remain uninitialized.
**kwargs
    For other keyword-only arguments, see the
    :ref:`ufunc docs <ufuncs.kwargs>`.

Returns
-------
add : ndarray or scalar
    The sum of `x1` and `x2`, element-wise.
    This is a scalar if both `x1` and `x2` are scalars.

Notes
-----
Equivalent to `x1` + `x2` in terms of array broadcasting.

Examples
--------
>>> np.add(1.0, 4.0)
5.0
>>> x1 = np.arange(9.0).reshape((3, 3))
>>> x2 = np.arange(3.0)
>>> np.add(x1, x2)
array([[  0.,   2.,   4.],
       [  3.,   5.,   7.],
       [  6.,   8.,  10.]])