初心者向けガイド: Numpy、Keras、PyTorch を使用した単純な線形回帰

初心者向けガイド: Numpy、Keras、PyTorch を使用した単純な線形回帰

[[433966]]

図 1 に示すように、さまざまな種類の機械学習技術は、さまざまなカテゴリに分類できます。方法の選択は、問題の種類 (分類、回帰、クラスタリング)、データの種類 (画像、グラフ、時系列、オーディオなど)、および方法自体の構成 (チューニング) によって異なります。

この記事では、Python で最も有名な 3 つのモジュールを使用して、単純な線形回帰モデルを実装します。 Python を使用する理由は、学習と適用が簡単だからです。 使用する 3 つのモジュールは次のとおりです。

1- Numpy: 配列、行列、多次元行列、およびそれらに関連するすべての操作に使用できます。

2- Keras: TensorFlow への高レベル インターフェース。 また、深層学習モデルと浅い学習モデルの両方をサポートおよび実装するためにも使用されます。 これは Google のエンジニアによって開発されました。

3- PyTorch: Torch をベースにしたディープラーニング フレームワーク。 これはFacebookによって開発されました。

これらのモジュールはすべてオープンソースです。 Keras と PyTorch はどちらも、実行を高速化するために GPU の使用をサポートしています。

次のセクションでは、線形回帰の理論と概念について説明します。 すでに理論に精通していて、実践的な部分を知りたい場合は、次の部分に進んでください。

線形回帰

これは、基礎となるデータに線を当てはめる数学的手法です。 出力と入力の間には線形関係があると想定します。 入力は特徴または説明変数と呼ばれ、出力はターゲットまたは従属変数と呼ばれます。 出力変数は連続している必要があります。 たとえば、価格、速度、距離、温度などです。 次の式は線形回帰モデルを数学的に表します。

Y = W*X + B

この方程式を行列形式で記述すると、 Y は出力行列、X は入力行列、W は重み行列、B はバイアス ベクトルです。 重みとバイアスは線形回帰パラメータです。 重みとバイアスは、それぞれ傾きと切片と呼ばれることもあります。

モデルをトレーニングする最初のステップは、これらのパラメータをランダムに初期化することです。 次に、入力データを使用して出力を計算します。 計算された出力は、誤差を測定することによって実際の出力と比較され、それに応じてパラメータが更新されます。上記の手順を繰り返します。この誤差は L2 ノルム (二乗誤差の合計) と呼ばれ、次のように表されます。

誤差を計算する関数は損失関数とも呼ばれ、さまざまな式を持つことができます。 i はデータ サンプルの数、y は予測出力、t は実際のターゲットです。 パラメータは、次の式で示される勾配降下法則に従って更新されます。

ここで、(ギリシャ文字のイータ)は学習率であり、パラメータの更新ステップ(更新速度)を指定します。 (ギリシャ文字のデルタ) は、予測された出力と実際の出力の差です。 i は反復(いわゆるラウンド)を表します。 L(W)は、重みに対する損失関数の勾配(微分)です。 学習率の値については言及する価値のあることが 1 つあります。 値が小さいほどトレーニングが遅くなり、値が大きいほど局所的最小値付近での振動や発散(損失関数の局所的最小値に到達できない)が発生します。 図 2 は上記のすべてをまとめたものです。

それでは、各モジュールを詳しく見て、上記のメソッドを実装してみましょう。

Numpy実装

Google Colab は強力で、必要なモジュールがすべて提供されており、インストールが不要で(一部のモジュールを除く)、無料で使用できるため、IDE(統合開発環境)として使用します。

実装を簡素化するために、単一の特徴とバイアス (y = w1*x1 + b) を持つ線形関係を検討します。

まず、線形回帰モデルを実装するための Numpy モジュールと視覚化のための Matplotlib をインポートします。

  1. #モデルを構築するにはNumpyが必要です
  2. numpyをnpとしてインポートする
  3. #データを視覚化するためのモジュールmatplotlibをインポートします
  4. matplotlib.pyplot をpltとしてインポートします。

作業にはいくつかのデータが必要です。 データは特徴と出力で構成されます。 特徴生成のために、ランダムな均一分布から 1000 個のサンプルを生成します。

  1. # この行は、コードを再現可能にするために使用します(実行時に同じ結果が得られるようにするため
  2. np.ランダムシード(42)
  3. #まずサイズを格納する変数を宣言します 生成たいトレーニングセット
  4. 観測数 = 1000
  5. # 次の関係があると仮定します
  6. # y = 13x + 2
  7. # y出力です  x入力または特徴である
  8. #一様分布からランダムに特徴を生成します。このメソッドには3 つの引数(low、high、 size ) があります。
  9. #サイズ  x1による観測です。この場合: 1000 x 1。
  10. x = np.random.uniform(low=-10, high=10, size =(観測値,1))
  11. #特徴ベクトル形状を出力してみましょう
  12. 印刷 (x.shape)

出力 (ターゲット) を生成するには、次の関係を使用します。

  1. Y = 13 * X + 2 + ノイズ

これを線形回帰モデルを使用して推定してみます。 重み値は 13、バイアスは 2 です。ノイズ変数はランダム性を追加するために使用されます。

  1. np.ランダムシード(42)
  2. #関数小さなノイズ追加します よりランダム
  3. ノイズ = np.random.uniform(-1, 1, (観測値,1))
  4. # f(x) = 13x + 2 + ノイズの定義に従ってターゲットを生成します。
  5. # これは、重みバイアスが 1 つある単純な線形関係です
  6. # この方法では、基本的に重み13 バイアスは 2であることを示しています
  7. ターゲット = 13*x + 2 + ノイズ
  8. #ターゲット形状をすぐ確認する ケースでは、n x mでなければなりません。ここでnサンプルです
  9. # m 出力変数は 1000 x 1 です。
  10. 印刷 (targets.shape)

生成されたデータをプロットしてみましょう。

  1. # xターゲットをプロットする
  2. plt.plot(x,ターゲット)
  3. # x軸y軸ラベルを追加する
  4. plt.ylabel( 'ターゲット' )
  5. plt.xlabel( '入力' )
  6. #グラフタイトルを追加する
  7. plt.title( 'データ' )
  8. # プロットを表示
  9. plt.show()

図 3 はこの線形関係を示しています。

モデルのトレーニングでは、パラメータの初期値から始めます。 それらは、指定された範囲内のランダムな均一分布から生成されます。 これらの値は実際の値から大きく離れていることがわかります。

  1. np.ランダムシード(42)
  2. # 重みバイアスを小さな初期範囲内でランダムに初期化します。
  3. # init_range はそれを測定する変数です
  4. 初期範囲 = 0.1
  5. # 重量 サイズはk x m k入力変数 m 出力変数
  6. #この場合、重み行列1 x 1です  入力(x)出力(y)1つだけ
  7. 重み = np.random.uniform(low=-init_range, high=init_range, size =(1, 1))
  8. # 偏見 サイズ1なので 出力は1 つだけです。バイアススカラーです
  9. バイアス = np.random.uniform(low=-init_range, high=init_range, size =1)
  10. # 重みがどのように初期化されたか確認するために重みを出力します
  11. #実際のとはかけ離れていることがわかります
  12. 印刷(重み)
  13. 印刷(バイアス)
  14. [[-0.02509198]]
  15. [0.09014286]

トレーニングの学習率も設定します。 0.02 という値を選択しました。 ここでさまざまな値を試してパフォーマンスを調べることができます。 データを取得し、パラメータを初期化し、学習率を設定したので、トレーニング プロセスを開始する準備が整いました。 エポックを 100 に設定してデータを反復処理します。各エポックでは、初期パラメータを使用して新しい出力を計算し、実際の出力と比較します。 損失関数は、前述の勾配降下法のルールに従ってパラメータを更新するために使用されます。 新しく更新されたパラメータは次の反復に使用されます。 このプロセスはエポック番号に達するまで繰り返されます。 トレーニングを中止する基準は他にもあるかもしれませんが、今日はそれについては説明しません。

  1. セット 若干の学習率
  2. # 0.02 この例では非常にうまく機能します。もう一度、いろいろ試してみてください
  3. # ぜひ試してみることを強くお勧めします
  4. 学習率 = 0.02
  5. # トレーニング データセットを 100 回反復します。学習率0.02うまく機能します
  6. # これらを反復エポックと呼びます。
  7. # 各エポック損失を格納する変数を定義しましょう
  8. 損失 = []
  9. iが範囲(100)内にある場合:
  10.  
  11. # これは線形モデルです: y = xw + b 方程式
  12. 出力 = np.dot(x,重み) + バイアス
  13. # デルタは出力ターゲット差です
  14. # ここでのデルタはベクトル 1000 x 1であることに注意してください
  15. デルタ = 出力 - ターゲット
  16.  
  17. #損失関数(回帰問題)としてL2 ノルム損失を検討していますが、2割っています
  18. # さらに、これを観測割って L2 ノルム平均を算出します
  19. 損失 = np.sum (デルタ**2)/2/観測値
  20.  
  21. # 各ステップ損失関数のを出力し、期待どおり減少しているかどうかを確認します
  22. 印刷(損失)
  23. #損失リスト追加する
  24. 損失.append(損失)
  25.  
  26. # もう一つの小さなトリック 損失関数同じ方法でデルタをスケーリングする 
  27. # このように、学習率はサンプル(観測値)依存しません
  28. # 繰り返しますが、これは原理的には何も変更しません。単に単一の学習率を選択するが簡単になります。
  29. #トレーニング サンプル (観測値)数を変更しても同じままになります。
  30. deltas_scaled = デルタ / 観測値
  31.  
  32. # 最後に、勾配降下法の更新ルールを適用する必要があります。
  33. # 重みは 1 x 1、学習率1 x 1 (スカラー)、入力は 1000 x 1、 deltas_scaledは 1000 x 1 です
  34. # 許可された操作が得られるように入力を転置する必要があります。
  35. 重み = 重み - 学習率 * np.dot(xT,deltas_scaled)
  36. バイアス = バイアス - 学習率 * np.sum (deltas_scaled)
  37.  
  38. # 重みは線形代数的に更新されます(行列から別の行列を引く)
  39. # ただし、バイアスはここでは単なる 1 つの数値なので、デルタをスカラー変換する必要があります。
  40. # 2 本の線はどちらも勾配降下法一致しています。

各エポックでのトレーニング損失を観察できます。

  1. # プロットの時代損失
  2. plt.plot(範囲(100),損失)
  3. # x軸y軸ラベルを追加する
  4. plt.ylabel( '損失' )
  5. plt.xlabel( 'エポック' )
  6. #グラフタイトルを追加する
  7. plt.title( 'トレーニング' )
  8. # プロットを表示
  9. # 曲線各エポック減少しており、これが必要なことです
  10. # 数エポック、曲線平坦になっていることがわかります。
  11. # これはアルゴリズムが収束したため、大きな更新がないことを意味します
  12. #または重みバイアス変化
  13. plt.show()

図 4 からわかるように、損失は各エポックで減少しています。 これは、モデルがパラメータの実際の値にどんどん近づいていることを意味します。 数エポック経過後も、損失に大きな変化はありませんでした。 これは、モデルが収束し、パラメータが更新されなくなった(または更新が非常に小さい)ことを意味します。

さらに、実際の出力と予測出力をプロットすることで、モデルが真の関係をどれだけうまく見つけているかを検証できます。

  1. #本物を印刷します および予測されるターゲット 注文 線形関係があるかどうかを確認します
  2. #実際ターゲット予測されたターゲットはほぼ完全に一致してます
  3. # これは私たちの機械学習モデル成功を示す良い兆候です
  4. plt.plot(出力、ターゲット、 'bo' )
  5. plt.xlabel( '予測' )
  6. plt.ylabel( '実数' )
  7. plt.show()
  8. # 重みバイアスを出力して、それらが目的どおり収束したかどうかを確認します。
  9. #実際の重み13バイアスは2であることが分かっています
  10. 印刷(重み、バイアス)

これにより、図 5 に示すグラフが生成されます。最後のエポック後のパラメータ値を印刷することもできます。 明らかに、更新されたパラメータは実際のパラメータに非常に近いです。

  1. [[13.09844702]] [1.73587336]

これは、Numpy が線形回帰モデルを実装する方法です。

Keras 実装

まず必要なモジュールをインポートします。この実装の中核となるのは TensorFlow です。 モデルを構築するために必要です。 Keras は、使いやすさを考慮して TensorFlow を抽象化したものです。

  1. #データを生成するにはNumpyが必要です
  2. numpyをnpとしてインポートする
  3. #視覚化にはMatplotlib が必要です
  4. matplotlib.pyplot をpltとしてインポートします。
  5. #モデル構築にはTensorFlowが必要です
  6. テンソルフローをtfとしてインポートする

データ(特徴とターゲット)を生成するために、Numpy でデータを生成するコードを使用しました。 他のモデルで使用したい場合に備えて、Numpy 配列をファイルに保存する行を追加しました (おそらく必要ありませんが、追加しても問題ありません)。

  1. np.savez( 'TF_intro' 、入力=x、ターゲット=targets)

Keras には Sequential クラスがあります。 モデルを作成するレイヤーを積み重ねるために使用されます。 機能と出力は 1 つしかないため、密なレイヤーと呼ばれるレイヤーが 1 つだけあります。 このレイヤーは線形変換 (W*X +B) を担当し、これがモデル化の対象となります。 この層は回帰モデルなので、出力計算用のニューロンと呼ばれる計算単位を持っています。 カーネル (重み) とバイアスの初期化には、指定された範囲内で均一なランダム分布を適用しました (Numpy と同じですが、レイヤー内で指定されます)。

  1. #入力サイズを格納する変数を宣言します 私たちのモデル
  2. #変数同じである必要があります
  3. 入力サイズ = 1
  4. #出力宣言する サイズ モデル
  5. #出力同じである必要があります(回帰の場合、通常は 1 です)
  6. 出力サイズ = 1
  7. # モデルの概要
  8. #モデルレイアウトします  '一連'  
  9. # 計算は行われていないことに注意してください。ネットワークを説明しているだけです。
  10. モデル = tf.keras.Sequential([
  11. # 各「レイヤー」  ここに記載されています
  12. # 'Dense'メソッドは、数学的演算が(xw + b)であることを示します。
  13. tf.keras.layers.Input(形状=(入力サイズ,))、
  14. tf.keras.layers.Dense(出力サイズ、
  15. #モデルをカスタマイズするために追加できる引数があります
  16. #私たちの場合私たちただ 解決を創造する  
  17. として 近い  NumPyモデル可能な限り適合
  18. # ここでのカーネルは単なる別名です 重みパラメータ
  19. kernel_initializer = tf.random_uniform_initializer(最小値 = -0.1、最大値 = 0.1)、
  20. バイアス初期化子 = tf.random_uniform_initializer(最小値 = -0.1、最大値 = 0.1)
  21. ])
  22. #モデル構造を印刷する
  23. モデル.要約()

モデルをトレーニングするために、Keras はこれを実行するための fit メソッドを提供します。 したがって、最初にデータを読み込み、特徴とラベルを指定し、エポックを設定します。 モデルをトレーニングする前に、適切なオプティマイザーと損失関数を選択してモデルを構成します。 これがコンパイルが行うことです。 学習率 0.02 (前と同じ) の確率的勾配降下法を使用し、損失は平均二乗誤差でした。

  1. # NPZからトレーニングデータをロードする
  2. トレーニングデータ = np.load ( 'TF_intro.npz' )
  3. #学習率を指定できるカスタムオプティマイザーを定義することもできます
  4. カスタムオプティマイザー = tf.keras.optimizers.SGD(学習率=0.02)
  5. # 'コンパイル'  あなた選ぶ場所です 最適化損失示す
  6. # ここでの損失は平均二乗誤差です
  7. model.compile(オプティマイザー=custom_optimizer、損失= 'mse' )
  8. # 最後にモデルを適合させ、入力ターゲットを指定します
  9. # 特に指定がない場合は、エポック数は1 (トレーニング1 エポック) になります
  10. #エポック  'ある意味'必須でもある
  11. # verboseいろいろ試せますが、verbose=2 が推奨されます
  12. model.fit(training_data[ '入力' ], training_data[ 'ターゲット' ], エポック=100, 詳細=2)

トレーニング中に各エポックでの損失を監視して、すべてが順調に進んでいるかどうかを確認できます。 トレーニングが完了したら、モデルのパラメータを印刷できます。 明らかに、モデルは実際の値に非常に近いパラメータ値に収束しています。

  1. # 重みバイアスの抽出は非常に簡単に行えます
  2. モデル.レイヤー[0].get_weights()
  3. # 重みバイアスを別々の変数保存して、簡単に調べられるようにすることができます
  4. # 数百または数千存在する可能性があることに注意してください
  5. 重み = model.layers[0].get_weights()[0]
  6. バイアス = model.layers[0].get_weights()[1]
  7. バイアス、重み
  8. (配列([1.9999999], dtype=float32), 配列([[13.1]], dtype=float32))

何千ものパラメータとさまざまなレイヤーを持つ複雑なモデルを構築する場合、TensorFlow を使用すると、多くの労力とコード行を節約できます。 モデルが単純すぎるため、Keras の利点はここでは示されません。

PyTorch 実装

トーチを輸入しております。これはモデルの作成に使用されるため必須です。

  1. #データ生成にはNumpyが必要です
  2. numpyをnpとしてインポートする
  3. #モデル構築にはPytorch が必要です
  4. 輸入トーチ

データ生成部分は、以前使用したコードと同じなので表示されません。 しかし、Torch はテンソル (torch.Tensor) のみを扱います。したがって、特徴配列とターゲット配列の両方をテンソルに変換する必要があります。 最後に、これら 2 つのテンソルからテンソル データセットが作成されます。

  1. # TensorDataset  テンソル形式トレーニングデータを準備する
  2. torch.utils.dataからTensorDataset をインポートします
  3. # CPUまたはGPU (利用可能な場合) のいずれかモデルを実行するには
  4. デバイス = 'cuda' 、torch.cuda.is_available() の場合、そうでない場合  'CPU'  
  5. # torchはテンソル扱うので numpy配列をtorchテンソル変換します
  6. x_tensor = torch.from_numpy(x) .float () です。
  7. y_tensor = torch.from_numpy(ターゲット) .float ()
  8. # 特徴テンソルターゲットテンソルトーチデータセット結合する
  9. train_data = TensorDataset(x_tensor、y_tensor) です。

モデルの作成は簡単です。 keras と同様に、Sequential クラスはレイヤーのスタックを作成するために使用されます。 線形レイヤー (keras では密なレイヤーと呼ばれます)、入力 1 つ、出力 1 つだけがあります。 モデルのパラメータは定義された関数を使用してランダムに初期化されます。 モデルを構成するには、学習率、損失関数、およびオプティマイザーを設定します。 設定する必要がある他のパラメータもありますが、ここでは紹介しません。

  1. #コードを再現可能にするためにシードを初期化する
  2. トーチ.マニュアル_シード(42)
  3. # この関数  モデルのパラメータ初期化
  4. def init_weights(m):
  5. isinstance(m, torch.nn.Linear): の場合
  6. torch.nn.init.uniform_(m.weight、a = -0.1、b = 0.1) です。
  7. torch.nn.init.uniform_(m.bias、a = -0.1、b = 0.1) です。
  8. # Sequentialクラスを使用してモデルを定義する
  9. #含まれるもの  1つの入力1つの出力を持つ単一の線形層のみ 
  10. モデル = torch.nn.Sequential(torch.nn.Linear(1, 1))。 to (デバイス)
  11. # 定義された関数を使用してモデルのパラメータを初期化します から
  12. モデルに適用(init_weights)
  13. # モデルのパラメータを印刷する
  14. 印刷(model.state_dict())
  15. # 学習率を指定する
  16. 0.02 ...
  17. # 損失関数 平均二乗誤差
  18. loss_fn = torch.nn.MSELoss(削減 = 'mean' )
  19. # 最適化は、一定の学習率を持つ確率的勾配降下法である
  20. オプティマイザー = torch.optim.SGD(model.parameters(), lr = lr)

ミニバッチ勾配降下法を使用してモデルをトレーニングします。 DataLoader は、トレーニング データセットからバッチを作成する役割を担います。 トレーニングは keras 実装に似ていますが、異なる構文を使用します。 Torch トレーニングに関する追加のポイントがいくつかあります。

1- モデルとバッチは同じデバイス (CPU または GPU) 上にある必要があります。

2- モデルをトレーニング モードに設定する必要があります。

3- 間違った値につながる可能性がある累積 (エポック間の勾配の合計) を防ぐために、各エポックの後に勾配を必ずゼロにすることを忘れないでください。

  1. #データのバッチ処理にはDataLoader が必要です
  2. torch.utils.dataからDataLoader をインポートします
  3. # トレーニングデータセットバッチ変換されます サイズはそれぞれ16サンプルです。
  4. #データをランダム化するためにシャッフル有効になっています
  5. train_loader = DataLoader(train_data、batch_size = 16、shuffle = True )
  6. #関数 モデルのトレーニング
  7. # それ関数です 関数(なんて素敵な
  8. def make_train_step(モデル、オプティマイザ、loss_fn):
  9. 定義train_step(x, y):
  10. #モデルトレーニングモード設定する
  11. モデル.train()
  12. # モデルデータ(特徴)をフィードフォワードして予測値を取得する
  13. yhat = モデル(x)
  14. #予測目標実際の目標基づいて損失を計算する
  15. 損失 = loss_fn(y, yhat)
  16. # 逆伝播法を実行して勾配を求める
  17. 損失.後方()
  18. #計算された勾配パラメータを更新する
  19. オプティマイザ.ステップ()
  20. #蓄積を防ぐために勾配ゼロ設定する
  21. オプティマイザ.zero_grad()
  22. リターン損失.item()
  23. train_stepを返す
  24. # トレーニング関数を呼び出す 
  25. train_step = make_train_step(モデル、オプティマイザ、loss_fn)
  26. #各エポック損失を保存する
  27. 損失 = []
  28. #エポック100設定する
  29. エポック = 100
  30. # トレーニング機能を実行する エポックデータバッチ
  31. # これが2つのforループがある理由です
  32. #エポック外側のループ
  33. #トレーニングデータバッチを反復処理するための内部ループ
  34. 範囲(エポック)内のエポックの場合:
  35. #損失を蓄積する 単一エポック内のすべてのバッチ
  36. バッチロス = 0
  37. train_loaderx_batch 、 y_batchの場合:
  38. x_batch = x_batch.to (デバイス)
  39. y_batch = y_batch.to (デバイス)
  40. 損失 = train_step(x_batch, y_batch)
  41. バッチ損失 = バッチ損失 + 損失
  42. # 63 魔法の数字ではありませんトレーニングセット内のバッチです 
  43. # サンプルは1000個ありバッチサイズは  16DataLoader定義
  44. # 1000/16 = 63
  45. エポックロス = バッチロス / 63
  46. 損失.append(epoch_loss)
  47. #トレーニング完了したらパラメータを出力します
  48. 印刷(model.state_dict())
  49. OrderedDict([( '0.weight' 、 テンソル([[13.0287]]、 デバイス= 'cuda:0' ))、 ( '0.bias' 、 テンソル([2.0096]、 デバイス= 'cuda:0' ))])

最後のステップとして、エポックごとのトレーニング損失をプロットして、モデルのパフォーマンスを観察できます。 図6に示すように。

仕上げる。 これまで学んだことをまとめてみましょう。

要約する

線形回帰は、実装と解釈が最も簡単な機械学習モデルの 1 つと考えられています。 この記事では、Python の 3 つの異なる一般的なモジュールを使用して線形回帰を実装しました。 作成可能な他のモジュールもあります。 たとえば、Scikitlearn。

<<:  プリンストン大学とインテルは、ResNetよりも大幅に高速で正確なParNetを提案している。

>>:  自己教師あり学習の概要と3つの主要分野における現状

ブログ    
ブログ    

推薦する

CatBoost: XGBoost よりも優れた GBDT アルゴリズム

[[242113]] [51CTO.com クイック翻訳] インターネット アルゴリズムには、推奨シ...

現代の製造業におけるマシンビジョンと人工知能の重要な役割

競争が激化し規制が厳しくなる環境において、マシン ビジョン (MV) ソリューションは製造業者にとっ...

すべてのデータ サイエンティストが知っておくべき 19 の機械学習アルゴリズム

【51CTO.com 速訳】機械学習アルゴリズム入門機械学習アルゴリズムの分野では、分類には通常次の...

...

線形回帰の勾配降下アルゴリズムのオクターブシミュレーション

[[190464]]勾配降下法の理論部分では、導出プロセスが非常にわかりにくいと嘆いたことがあり、よ...

人工知能の罪と罰についても話しましょう

1. ある人にとっての好物は、別の人にとっては毒物かもしれない人工知能 (AI) が独自の言語を作成...

高校時代の位相除算と位相減算のアルゴリズムについて

[[356850]]プログラミングの本質はアルゴリズムから来ており、アルゴリズムの本質は数学から来て...

インダストリー4.0におけるインテリジェントロボットの影響

インダストリー 4.0 でスマート ロボットを活用すると、企業は自動化、柔軟性、効率性、安全性の向上...

インテリジェントな顧客サービス チャット モジュールの 3 つのソリューションを比較すると、どれが気に入りましたか?

現在のインテリジェント顧客サービス市場とその NLP 分野において、チャット モジュールは非常に重要...

CommScope Insights: データセンターが AI をより迅速かつコスト効率よく活用する方法

人気のSF小説で「機械知能の台頭」が描かれる場合、通常はレーザーや爆発などのシーンが伴います。それほ...

これら4つの業界は今後5年間で大きな利益を得るだろう

[[261735]] [51CTO.com クイック翻訳] アイリーン・リーはカウボーイ・ベンチャー...

自然言語処理の核心:シーケンス学習

人生におけるすべてのことは時間と関連しており、連続性を形成しています。シーケンシャルデータ(テキスト...

ちょうど今、ビートルズはAIがプロデュースした「最後の」新曲をリリースした。

音楽に詳しい友人なら、ビートルズを知らない人はいないでしょう。ビートルズは、歴史上最も偉大で最も影響...

...

顔認識はどのようにして国民の個人情報を侵害するのでしょうか?犯罪者がアリペイを騙し取るために3D顔モデルを作成

[[360029]]記者 | 趙孟近年、顔認識技術の普及に伴い、国民の個人情報のセキュリティに関する...