MindSporeの基礎知識【ディープラーニング・基礎編】

マインドスポアとは何ですか? 他の深層学習フレームワークとどう違うのですか?

MindSpore は、Huawei が開始したオープンソースの深層学習フレームワークです。深層学習モデルの開発、トレーニング、展開を簡素化するように設計された開発ツールとアルゴリズム ライブラリのエンドツーエンドのセットを提供します。

他の深層学習フレームワークと比較して、MindSpore には次の特徴があります。

  1. 自動並列コンピューティング: MindSpore には自動並列コンピューティングの機能があり、ハードウェア リソースとネットワーク トポロジに応じて並列コンピューティングを自動的に最適化できます。これは、並列計算を手動で処理することなく、モデルの设计合計开发に集中できることを意味します

  2. 動的計算グラフ: MindSpore は動的計算グラフの方法を採用しており、実行時に計算グラフを動的に構築できます。静的計算グラフと比較して、動的計算グラフはより柔軟で、可変長の入力データを容易に処理できます

MindSpore の中心的なコンセプトは何ですか?

  1. 张量(Tensor)
    Tensor はMindSpore の基本データ型であり、多次元配列と考えることができます。テンソルは、スカラー(0维テンソル)、ベクトル(1维テンソル)、行列(2维テンソル)、または高次元の配列であるデータを保存および表現するためのコンテナーと考え​​ることができます。

Tensor は、数値、画像、音声、またはその他の種類のデータを保存できます。簡単なテンソルの例を次に示します。

import mindspore as ms
import numpy as np

# 创建一个2x3的张量
data = np.array([[1, 2, 3], [4, 5, 6]])
tensor = ms.Tensor(data)
print(tensor)

出力結果:

[[1 2 3]
 [4 5 6]]

上の例では、NumPy 配列を使用して 2x3 を作成し张量、出力しました。テンソルは、必要なデータを含むテーブルと考えることができます。

  1. 计算图(Computational Graph):計算グラフは、MindSpore が計算プロセス
    を説明するために使用する概念ですこれは、モデルの計算プロセスを表す一連の計算ノードとデータ ストリームで構成されます。MindSpore では、計算グラフを構築してニューラル ネットワークの構造と動作を定義できます。簡単な計算グラフの例を次に示します。
    import mindspore.nn as nn
    from mindspore import Tensor
    
    class Net(nn.Cell):
        def __init__(self):
            super(Net, self).__init__()
            self.fc = nn.Dense(10, 20)
    
        def construct(self, x):
            return self.fc(x)
    
    net = Net()
    input_data = Tensor([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
    output = net(input_data)
    print(output)
    
    出力結果:
    [[-0.01353457 -0.02122901 -0.00785669  0.00269206 -0.01708164 -0.00544778
      -0.03082642 -0.0366452   0.04129747  0.03599006]
     [-0.00863788 -0.02421871  0.01378689 -0.01104463  0.01437971 -0.0325471
      -0.01884251 -0.03105863  0.04269245  0.03176927]]
    
    上の例では、1 つの完全に接続された層を持つ単純なニューラル ネットワーク モデルを定義しましたNetモデル インスタンスを呼び出すことで、入力データをモデルに渡し、出力結果を取得します。このプロセスでは、計算グラフは入力から出力までのデータのフロー パスと、対応する計算操作を定義します。

計算グラフは、深層学習フレームワークを使用する場合に非常に重要な概念です。データのフロー パスや対応する計算操作など、モデル内の計算プロセスを記述します。

Netクラス のコンストラクターで、入力フィーチャの数を 10 に、出力フィーチャの数を 20 に指定して、__init__全結合層 ( ) を作成します。nn.Denseこの完全に接続された層はニューラル ネットワーク モデルの一部であり、入力データの線形および非線形変換を実行するために使用されます。

全結合層の線形変換は次のように表すことができます。

output = input * weight + bias

ここでinput、 は入力テンソル、はweight入力と出力を接続する重み行列、はバイアス ベクトルbiasです入力データに重み行列を乗算し、バイアス ベクトルを加算することにより、全結合層は線形変換を実現します。次に、全結合層も活性化関数(通常は Yes )を適用しますアクティベーション関数は、 result に対して線形変換を実行し、モデルの非線形機能を導入します。一般的に使用される活性化関数には、ReLU、Sigmoid、Tanh などがあります。


非线性非线性映射

次に、construct入力テンソルを受け取りxモデルのフォワード パス操作を実行するメソッドを定義します。このメソッドでは、入力テンソルを全結合層 ( ) に渡しself.fc、出力結果を返します。

次に、Netクラスをインスタンス化してモデル オブジェクトを取得しますnetinput_data次に、それぞれ 5 つの特徴を持つ 2 つのサンプルを含む入力テンソルを作成しました。この入力テンソルはモデルへの入力として使用されます。

input_data最後に、入力テンソルをモデル オブジェクトに渡しnet、出力テンソルを取得しますoutput最後に、テンソルの値を出力します。

次に、計算グラフの概念を見てみましょう。計算グラフは計算プロセスを記述するための概念であり、モデルの計算プロセスを表す一連の計算ノードとデータフローで構成されます。
この例では、計算グラフは、入力から出力までのデータのフロー パスと、対応する計算操作を記述します。入力テンソルはinput_dataデータ フローの開始点として使用され、全結合層の計算操作の後、最終的に出力テンソルoutputが取得されます。

計算グラフの利点は、次のことができることです。自動録音モデル内の計算処理、バックプロパゲーションやパラメータ更新のための自動微分を実行できます。これにより、深層学習フレームワークがさまざまな複雑な計算操作を効率的に実行できるようになります。

  1. 操作符(Operator):
    MindSpore では、演算子は、さまざまな数学的および論理演算を実行するために使用される関数またはメソッドです。これらを使用して、テンソルに対して加算、乗算、畳み込みなどの演算を実行し、複雑な計算プロセスを構築できます。単純な演算子の例を次に示します。
    import mindspore.ops as ops
    import mindspore.numpy as mnp
    
    x = mnp.array([1, 2, 3])
    y = mnp.array([4, 5, 6])
    z = ops.add(x, y)
    print(z)
    
    出力結果:
    [5 7 9]
    
    上の例では、MindSpore の演算子を使用してops.add2 つのテンソルの要素ごとの加算を実行しました。この演算子は、2 つのテンソルの対応する位置に要素を追加し、新しいテンソルを返します。

これらの中心的な概念を理解することで、MindSpore をよりよく理解し、適用できるようになります。

  • 张量データコンテナとして、データを保存および表現します。
  • 计算图計算プロセスを説明し、さまざまな操作を接続します。
  • 操作符さまざまな数学的および論理演算を実行するために使用されます。

これらの概念は合わせて MindSpore フレームワークの基礎を形成し、深層学習モデルの開発とトレーニングに役立ちます。

簡単な例

以下は、MindSpore を使用して単純なニューラル ネットワーク モデルを作成し、トレーニングする方法を示す簡単な例です。

import mindspore.nn as nn
from mindspore import Tensor
from mindspore import context

# 定义一个简单的神经网络模型
class Net(nn.Cell):
    def __init__(self):
        super(Net, self).__init__()
        self.fc = nn.Dense(10, 20)  # 全连接层

    def construct(self, x):
        return self.fc(x)

# 创建模型实例
net = Net()

# 创建输入数据
input_data = Tensor([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]], dtype=mindspore.float32)

# 设置运行环境
context.set_context(mode=context.PYNATIVE_MODE)  # 使用动态图模式

# 前向传播计算
output = net(input_data)
print(output)

出力結果:

[[ 0.17096008 -0.07126708 -0.15691847  0.1241325  -0.16767085 -0.10899045
-0.12603217 -0.1612322   0.05598223 -0.06014717 -0.02817714 -0.08028036
-0.01887886 -0.07969902  0.16505516 -0.14510706  0.02585109 -0.01945627
0.10038166 -0.08208209]
[-0.02955157 -0.12271015 -0.10049891  0.12457395 -0.12001585 -0.146377
-0.18082708 -0.1842674   0.07435594 -0.09068934 -0.07357719 -0.14754806
0.01935469 -0.13508569  0.1484941  -0.1347757   0.02730994 -0.01618791
0.07225682 -0.02873495]]

これは、入力データに対するモデルの予測を表す 2x20 テンソルです。各行は入力サンプルに対応し、各列は予測値に対応します。

出力の正確な値は、モデルの初期化ランダム性により異なる場合があることに注意してください。したがって、コードを実行すると若干異なる結果が得られる場合があります。

ただし、全体として、出力は同様の構造大きさを持つはずです。

上の例では、まず MindSpore の関連モジュールをインポートし、単純なニューラル ネットワーク モデルを定義しましたNetinput_data次に、 2 つのサンプルを含むテンソルである入力データを作成しました。次に、constructモデル インスタンスのメソッドを呼び出して順伝播計算を実行し、結果を出力します。

この簡単な例を通して、MindSpore を使用したニューラル ネットワーク モデルの作成と実行が非常に直感的で簡単であることがわかります。独自のニーズに応じて、モデルの設計、データ処理、トレーニング プロセスを構成できます。同時に、MindSpore は、深層学習の分野でより複雑で実践的なタスクを実行するのに役立つ、より多くの機能とツールを提供します。

おすすめ

転載: blog.csdn.net/qq_22841387/article/details/131523716