PyTorch でテンソルを操作するための 5 つの基本関数

PyTorch でテンソルを操作するための 5 つの基本関数

ニューラル ネットワークを正確かつ効率的に構築する能力は、ディープラーニング エンジニアの採用担当者が最も求めるスキルの 1 つです。 PyTorch は、主にディープラーニングに使用される Python ライブラリです。 PyTorch の最も基本的で重要な部分の 1 つは、数値、ベクトル、行列、または任意の n 次元配列であるテンソルを作成することです。ニューラル ネットワークを構築する際の計算速度を下げるには、明示的なループの使用を避ける必要があります。このようなループを回避するには、ベクトル化された操作を使用できます。ニューラル ネットワークを構築する場合、行列演算を十分速く計算する能力が重要です。

「NumPy ライブラリを使わないのはなぜですか?」

ディープラーニングでは、モデルパラメータの導関数を計算する必要があります。 PyTorch はバックプロパゲーション中に導関数を追跡する機能を提供しますが、NumPy にはこの機能がありません。これは PyTorch では「Auto Grad」と呼ばれます。 PyTorch は、GPU を使用した高速実行のための組み込みサポートを提供します。これはモデルのトレーニングにおいて非常に重要です。 Numpy には計算を GPU にオフロードする機能がないため、モデルのトレーニングにかかる​​時間が非常に長くなってしまいます。

PyTorch を使用したすべてのディープラーニング プロジェクトは、テンソルの作成から始まります。ニューラル ネットワークの構築を含むあらゆるディープラーニング プロジェクトのバックボーンとなる、知っておくべき機能をいくつか見てみましょう。

  • トーチ.テンソル()
  • トーチ.合計()
  • トーチ.index_select()
  • トーチ.スタック()
  • トーチ.mm()

Pytorch をインストールしたら、コードに直接インポートできます。

  1. # torchその他の必要なモジュールをインポートする
  2. 輸入トーチ

トーチ.テンソル()

まず、テンソルの型、テンソルの次元、テンソルの内容など、テンソル x のさまざまなプロパティを要約するヘルパー関数 describe(x) を定義します。

  1. # ヘルパー関数 
  2. def 記述(x):
  3. print( "タイプ: {}" .format(x.type()))
  4. print( "形状/サイズ: {}" .format(x.shape))
  5. print( "値: \n{}" .format(x)

torch.Tensor を使用して PyTorch でテンソルを作成する

PyTorch では、torch パッケージを使用してさまざまな方法でテンソルを作成できます。 テンソルを作成する1つの方法は、次元を指定してランダムテンソルを初期化することです。

  1. 記述(torch.Tensor(2, 3))

Python リストを使用して宣言的にテンソルを作成する

Python リストを使用してテンソルを作成することもできます。 リストを関数の引数として渡すだけで、テンソル形式が得られます。

  1. x = トーチ.テンソル([[1, 2, 3],[4, 5, 6]])  
  2. 記述(x)

NumPy 配列を使用してテンソルを作成する

NumPy 配列から PyTorch テンソルを作成することもできます。 テンソルの型は、デフォルトの Float Tensor ではなく Double Tensor です。 これは、以下に示すように、NumPy データ型 float64 に対応します。

  1. numpyをnpとしてインポートする
  2. npy = np.random.rand(2, 3)
  3. torch.from_numpy(npy) を記述します。

テンソルでできないことは何でしょうか? テンソルは実数または複素数である必要があり、文字列や文字であってはなりません。

  1. トーチ.テンソル([[1, 2], [3, 4, 5]])
  2.  
  3.  
  4. ---------------------------------------------------------------------------  
  5. ValueError トレースバック (最新の呼び出しが最後)
  6. <ipython-input-5-28787d136593> は<module>あります
  7. 1 # 例 3 - 破壊 (破壊されるタイミング示す)
  8. ----> 2 torch.tensor([[1, 2], [3, 4, 5]])  
  9.  
  10. ValueError: 期待されるシーケンス さ 2、次元1 (3 を取得)

torch.tensor() はテンソルであるため、文字通りあらゆる PyTorch プロジェクトの中核を形成します。

トーチ.合計()

この関数は、入力テンソル内のすべての要素の合計を返します。

  1. 記述(torch.sum ( x, dim=0, keepdims= True ))

NumPy に精通している場合は、2D テンソルの場合、行を次元 0、列を次元 1 として表すことに気付いたかもしれません。 torch.sum() 関数を使用すると、行と列の合計を計算できます。

また、結果の次元を保持するために、keepdims に True を渡します。 dim = 1 を定義することで、関数に配列を列ごとに折りたたむように指示します。

  1. torch.sum ( npy 、dim=1、keepdims= True )
  2.  
  3. ---------------------------------------------------------------------------  
  4. TypeError トレースバック (最新の呼び出しが最後)
  5. <ipython-input-17-1617bf9e8a37> は<module>()にあります
  6. 1 # 例 3 - 破壊 (破壊されるタイミング示す)
  7. ----> 2 torch.sum(npy,dim=1,keepdims=True)  
  8.  
  9. TypeError: sum () は無効な引数組み合わせを受け取りました- (numpy.ndarray、keepdims=bool、dim= int ) を取得しましたが、次のいずれかが期待されていました:
  10. * (テンソル入力、*、torch.dtype dtype)
  11. 一致しなかったのは キーワードの内、正しくないもの: keepdims、dim
  12. * (テンソル入力、intタプルdim、bool keepdim、*、torch.dtype dtype、テンソル出力)
  13. * (テンソル入力、名前タプルdim、bool keepdim、*、torch.dtype dtype、テンソル出力)

この関数は、メトリックと損失関数の計算に非常に役立ちます。

トーチ.index_select()

この関数は、indices のエントリを使用して次元 dim に沿って入力テンソルをインデックス付けする新しいテンソル (LongTensor) を返します。

  1. インデックス = torch.LongTensor([0, 2])
  2. 記述します(torch.index_select(x, dim=1, index =インデックス))

インデックスをテンソルとして渡し、軸を 1 と定義できます。この関数は、サイズが rows_of_original_tensor x length_of_indices_tensor の新しいテンソルを返します。

  1. インデックス = torch.LongTensor([0, 0])
  2. 記述します(torch.index_select(x, dim=0, index =インデックス))

インデックスをテンソルとして渡し、軸を0と定義すると、関数はサイズが

columns_of_original_tensor x length_of_indices_tensor の新しいテンソル。

  1. インデックス = torch.FloatTensor([0, 2])
  2. 記述します(torch.index_select(x, dim=1, index =インデックス))

この関数は、テンソルの非連続インデックスなどの複雑なインデックス作成に役立ちます。

トーチ.スタック()

これにより、新しい次元に沿ってテンソルのシーケンスが連結されます。

  1. 記述(torch.stack([x, x, x], dim = 0))

連結したいテンソルを dim 0 のテンソルのリストとして渡し、行に沿って積み重ねることができます。

  1. 記述(torch.stack([x, x, x], dim = 1))

連結したいテンソルを、dim が 1 のテンソルのリストとして渡し、列に沿って積み重ねることができます。

  1. y = トーチ.テンソル([3,3])
  2. 記述(torch.stack([x, y, x], dim = 1))
  3.  
  4. --------------------------------------------------------------------------  
  5. RuntimeError トレースバック (最新の呼び出しが最後)
  6. <ipython-input-37-c97227f5da5c> は<module>()にあります
  7. 1 # 例 3 - 破壊 (破壊されるタイミング示す)
  8. 2 y = トーチ.テンソル([3,3])
  9. ----> 3 記述(torch.stack([x, y, x], dim = 1))  
  10.  
  11. RuntimeError: スタックは各テンソルが同じサイズあると想定していますが、エントリ 0では[2, 3] エントリ 1では[2]です。

この関数は、行列を平坦化するために torch.index_select() と組み合わせて使用​​すると便利です。

トーチ.mm()

この関数は行列間の乗算を実行します。

  1. mat1 = トーチ.randn(3,2)
  2. 記述(torch.mm(x, mat1))

行列を引数として渡すだけで簡単に行列乗算を実行でき、関数は 2 つの行列の積として新しいテンソルを生成します。

  1. mat1 = np.random.randn(3,2)
  2. mat1 = torch.from_numpy(mat1) .to (torch.float32)
  3. 記述(torch.mm(x, mat1))

上記の例では、NumPy 配列を定義し、それを float32 テンソルに変換しました。 これで、テンソルの行列乗算を正常に実行できるようになりました。 操作が成功するには、2 つのテンソルのデータ型が一致している必要があります。

  1. mat1 = トーチ.randn(2,3)
  2. 記述(torch.mm(x, mat1))
  3.  
  4. ---------------------------------------------------------------------------  
  5. RuntimeError トレースバック (最新の呼び出しが最後)
  6. <ipython-input-62-18e7760efd23> は<module>()にあります
  7. 1 # 例 3 - 破壊 (破壊されるタイミング示す)
  8. 2 mat1 = torch.randn(2,3)
  9. ----> 3 記述(torch.mm(x, mat1))  
  10.  
  11. ランタイムエラー: mat1mat2 の形状を乗算できません (2x32x3)

行列の乗算演算を正常に実行するには、行列 1 の列と行列 2 の行が一致している必要があります。 torch.mm() 関数は行列乗算の基本的な規則に従います。 行列が同じ順序であっても、別の行列の転置と自動的に乗算されるわけではないので、ユーザーが手動で定義する必要があります。

バックプロパゲーション中に導関数を計算するには、行列の乗算を効率的に実行できる必要があります。ここで torch.mm() が役立ちます。

要約する

これで、5 つの基本的な PyTorch 関数の学習は終了です。 基本的なテンソルの作成から、torch.index_select() のような特定のユースケースを持つ高度であまり知られていない関数まで、PyTorch はデータ サイエンス愛好家の作業を容易にする多くの関数を提供します。

<<:  自動運転の4つの主要技術の簡単な分析

>>:  年次レビュー:人工知能業界は2021年後半に突入

推薦する

...

ケンブリッジ 2020 人工知能パノラマレポート、将来予測される 8 つの AI トレンド

ケンブリッジ大学の「AIパノラマレポート」2020年版がこのほど正式に発表された。ケンブリッジ大学の...

2021年、人工知能は知的ではない

ガートナー曲線について聞いたことがあるかもしれません。新しい技術が初めて導入されたとき、誰も興味を示...

中国の博士が強化学習を使ってSpaceXのロケットを回収

[[435329]]この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI...

データが生成型 AI に対応できるようにする 7 つの方法

翻訳者 |ブガッティレビュー | Chonglou誰もが生成AIと大規模言語モデルの力を活用したいと...

DevOps で AI を使用して非線形スケーリングを実現する方法

テクノロジーが飛躍的に進歩するにつれ、AI はスピード、スケーラビリティ、品質、柔軟性を求めるあらゆ...

大型モデルの中に泥棒はいますか?上海交通大学は、パラメータを保護するために、大規模モデル用の「人間が読める指紋」を作成します

大規模モデルの事前トレーニングには膨大な量のコンピューティング リソースとデータが必要となるため、事...

ChatGPTは来週Androidでリリースされ、事前登録が開始されました

ChatGPTは来週Android版をリリースすることを公式に発表し、Google Playストアで...

トレンディで無料! 2024 年に持つ価値のある 8 つの「チート」ツール!

編纂者:Xing Xuan企画 | ヤン・ジェン制作:51CTO テクノロジースタック(WeChat...

AIで開発効率を高めるVSCode拡張機能9選

人工知能は今年もテクノロジー分野で人気を博し続けています。特に、大規模モデルはソフトウェア開発を含む...

SaaSベースのAIトレーニングがゲームチェンジャーとなる理由

機械学習アプリケーションが増加するにつれて、多くの人が機械学習トレーニング データを使用する利点を理...

...

ディープラーニングにおける PyTorch と NumPy 間のデータ変換についてどれくらい知っていますか?

ディープラーニングでは、PyTorch と NumPy はデータの処理と変換によく使用される 2 つ...

ML コミュニティにおける 8 つの主要な「癌」: 盲目的崇拝、相互批判、SOTA の重視と有効性の軽視...

諺にあるように、人がいるところには川や湖があり、さまざまな立場や利害の争いがあるものです。科学研究の...

...