PyTorch?」チュートリアルをやってみたTweetディープラーニングのフレームワークであるPyTorchをインストールしましたが、最初は右も左もわからない状態だと思います。PyTorch?」で使い方を覚えましょう。wat(@watlablog)です。まとめPyTorch公式チュートリアルからはじめようチュートリアルをやる意義PyTorchは数あるディープラーニングのフレームワークの中の1つです。このページを書いている筆者は機械学習やディープラーニングを学び始めた初心者ですが、初心者の僕がPyTorchを選んだ理由は「ディープラーニング初心者がPyTorchを選んだ3つの理由」に記載しました。このページをご覧の皆様がまだ初心者でフレームワーク選びを迷っている場合は、少しだけ参考になるかも知れません。ディープラーニングを学び始めたばかりの初学者にとって、PyTorchインストールしたし、早速多層のニューラルネットワーク構築して画像分類でもしてみるか!とはならないと思います。なったら既に中級者以上です!我々初心者は黙ってまず始めにチュートリアルをやりましょう!公式のチュートリアルを学ぶことで自力で模索するよりも効率良く、正しい手順でフレームワークを使えるようになることが期待できます。blitzPyTorchの公式チュートリアルは以下の公式チュートリアルの「Tutorials」からアクセス可能です。Started」にアクセスします。blitzにアクセスすると、まず2分程度の動画説明があります。音声は英語ですが映像がわかりやすいので、英語が苦手でも雰囲気は掴めるのではと思います。PyTorch?」になります。ここからやりましょう。チュートリアルを進めるためにはtorchとtorchvisionというライブラリが必要です。インストールしていない人は先ほどの「ディープラーニング初心者がPyTorchを選んだ3つの理由」という記事を参考にしてみて下さい。挫折せずに進めるか...早速やってみましょう!PyTorchでテンソルの計算をするコードnumpyのndarryも似たような構造ですが、torchのtensorを使うとGPUを使った高速化を行うことが可能です。このGPU利用ができることがPyTorchを使う利点の1つです(僕はしばらくはCPUで計算しますが)。PyTorch?ではテンソルの計算方法を習得します。参考:テンソル(wiki)初期化していないテンソルを新規に定義する最初の例題は初期化していない空のテンソルを定義する方法です。torch.empty(5,3)print(x)値を決めていないテンソルを定義すると、その時点でメモリにある値が割り当てられるとのこと。無事以下のように結果を得ることができました。1.0469e-38]])初期化されたテンソルを新規に定義する次は初期化されたテンソルの定義方法です。チュートリアルでは1つ1つ例題を出していましたが、特に説明が多く必要というわけではなさそうなので、ここではまとめて書いてみます。linspace)randは一様分布で0-1の範囲を、randnは正規分布でランダムな値を定義します。randpermは指定した数値内で1Dの整数値テンソルを返します。zerosやonesで0テンソや1テンソルを作れますが、dtypeで型を指定できます。ここではlong型という整数型を指定しています。int型は使わないそうですが、今はあまり深くやりません。tensorを使うと直接入力でテンソルを定義可能です。arangeやlinspaceも使え、本当にnumpyライクに使うことができます。存在しているテンソルを使って新しいテンソルを作る方法も紹介されています。既存のテンソルのサイズで定義print(x)特に_likeはrandn以外にもrand_like等他の種類のテンソルでも共通で使用可能です。_likeを使用することで既存テンソルのサイズに合わせた新規テンソルを作成といったことも容易にできそうです。1.3375]])テンソルのサイズを取得するテンソルのサイズは.sizeで取得します。取得したサイズtensor.Sizeはタプル形式なので、全てのタプル操作がサポートされています。3])テンソルの演算テンソルの演算にも様々な方法があります。以下のコードはいずれも2つの1テンソルの加算です。単純に「+」記号で演算する以外にも、add関数や「アンダースコア(_)」を入れたadd_で加算する方法を紹介しています。add関数を使うことで引数を使って他の変数に値を受け渡すことができます。x.add_とアンダースコアを入れる作業は他にもx.copy_等があり、これは共通してxを変更します。addして置換y.add_(x)print(y)いずれも以下の同一の結果を得ます。演算の方法でメモリの割り当て方が異なるので、計算パフォーマンスに影響すると考えられます。2.]])個人的にはできるだけIn-Place系の操作を使った方が良さそうと思うけど、実際どうなんだろう?テンソルをスライスをするPyTorchのテンソルはnumpyのようなスライス(indexing)が可能です。1行スライス上記コードは以下の結果を得ます。-0.4838])テンソルのresize/reshapenumpyでいうresizeやreshapeは、PyTorchテンソルの場合以下のように.viewを使います。8)と指定するとまず8列が定義されてxの残りから他の次元が推測されzになりました。-0.4007]])テンソルから要素を取得1要素のテンソルの場合、.itemを使ってPythonナンバーを取得できます。torch.randn(1)print(x)print(x.item())取得した数値はテンソルではなく、Pythonでそのまま扱える数です。-0.1962570399045944212tensor([-0.1963])-0.19625703990459442numpyとtensorの相互変換tensorからnumpyに変換するには.numpy()、numpyからtensorに変換するにはtorch.from_numpy()を使います。bをテンソルに変換print(a)print(b)print(c)相互に変換することができました。したらこの操作は最もよく使うことになるかも知れません。1.])GPUではなく、CPU上のtensorはCharTensor以外全てnumpyとの相互変換がサポートされています。PyTorch?のチュートリアルは以上です。ここやチュートリアルに書いていない演算はこちらの公式ドキュメントに記載されています。PyTorch?」公式チュートリアルをやってみました。本家ページは全部英語で説明がされていますが、ここでは個人的に理解したことを日本語で書いています。PyTorchはテンソルの計算が基礎にあるので、ここで習得したテンソル定義、演算、変換はいつでも使えるようにしておきたいですね。機械学習SNSでもご購読できます。技術系の職に就き日々実験やシミュレーションを使う仕事をしています。このブログでは初心者が科学技術プログラムを作れるようになることを目標に、学習結果を記録していきます。*メールアドレス(公開はされません。*次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。