まったりAI勉強記

AI(人工知能)について、特にゆかりがあるわけでもない社会人が、まったりとAIについて勉強していく勉強日記です。

【ひとり読書会】PyTorch&深層学習プログラミング(第5回)

どうも、カタミチです。

さて、今日も「最短コースでわかる PyTorch&深層学習プログラミング」のひとり読書会、やっていきますかねー。

今日から「基礎編」。1章の「ディープラーニングのためのPythonのツボ」に入っていきたいと思います!

 

1-1. 本書で学ぶ重要概念

この節は、以降の1-2から1-6にどんなことが書いてあるのかの説明の節でした。どうやら、PythonやPyTorchの特性として事前に理解しておいた方がいい事が、いくつか書かれているようですね。

ということで早速、1-2から見てみましょう!

 

 

1-2. コンテナデータ型の変数にご用心

さて、節のタイトルにある「コンテナデータ型」の変数ってなんじゃろ?って話なんですが、どうやらNumPyの配列データみたいなやつの型のことを、こう呼ぶことがあるようですね。

「コンテナ」って表現は色んなところで見かけますが、概念としては「中に何か入った箱」ですね。クレーンで船に積み込むデカいアイツです。今回は変数の型を指した用語として使うようなので、そのつもりで見てみましょうかね。

ちなみにNumPyの配列データに、データ型を調べるtype関数を使うと…

numpy.ndarray

って値が返ってきます。Python標準の配列は「list」という値が返ってくるので、別もの扱いですね。以前、なにかの時にちょっとつまずきました、ココ。

まぁしかし、今回の注意点はそんなとこではありません。とりあえずコード。

これを実行すると当然…

\(x\)も\(y\)も同じNumPy配列が返されます。そらそうだ。

ここで、\(x\)の中身のデータを少しいじって、

これを実行すると…

ぐはっ!\(y\)の中身まで変わりやがったっ!

この動き、25年ほど前に独学で「C言語」の勉強をしていたときの記憶が蘇りましたよ、ええ。「値渡し」と「参照渡し」の違いガーってやつです。\(y\)に渡された\(x\)は、値ではなく住所だったってことになります。

で、コンテナデータ型の値渡しをしたい場合は…

copy関数ってやつを使うみたいですね。これで\(x\)と\(y\)は、晴れて独立に存在するようになったようです。めでたしめでたし。

しかしこれ、今はここだけに注目しているからいいものの、コードの海に飛び込んだ際は、気を抜くと間違いに気づかなそうです。肝に銘じておかねば。ちなみに、PyTorchで扱うデータである「テンソル」(Tensor)からnumpy.ndarray型に変換する際も、同様の問題が起きるとのこと。ここでも、copy忍者のカカシ先生が有効なようなので、うまく使いこなしたいところです(誰だよカカシ先生って)

 

ということで

今回のポイントは、コンテナデータ型の複製には注意が必要ってことですね。ひとまず頭に入れておく事にしますかねー。

 

ではまた。