Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
.NETラボ 勉強会 2021年1月
23th January 2021
Fujio Kojima
『C#で機械学習』
自己紹介
• 小島 富治雄
• @Fujiwo
• 福井コンピュータ グループ
• Microsoft MVP (2005-2021)
•BuriKaigi 2021
• オンライン開催!
• 2021/01/30 13:30 - 17:30
• オンライン懇親会!
with ぶりしゃぶ!
大事な話は最初に!
https://toyama-eng.connpass.com/ev...
Agenda
1. 機械学習 (ML: Machine Learning)
2. フルスクラッチ ニューラル ネットワーク (C#)
3. ML.NET (C#)
• ML.NET Model Builder → ML.NET (C#)
4. ...
本日のソースコード
• .NET Lab Study Meeging Jan. 2021 「Machine Learning with C#」 | Fujiwo | GitHub
• https://github.com/Fujiwo/DotN...
1. 機械学習 (ML: Machine Learning)
人工知能 (AI)
機械学習 (ML)
ニューラル ネットワーク
6
Deep Learning
ニューラル ネットワークとは
7
神経細胞のネットワーク
8
神経細胞のネットワークを模倣
ニューラル ネットワーク
入力
入力
・
・
・
出力
出力
・
・
・
・
・
・
・
・
・ ・
・
・
ニューロン
入力層 中間層 出力層
9
個々のニューロン
ニューロン
出力
入力
入力
・
・
・
入力
バイアス
10
ニューラル ネットワーク
入力
入力
出力
ニューロン
入力層 中間層 出力層
バイアス
重み
11
ニューラル ネットワークの訓練
正解
ー
1. 重みの修正
2. 重みの修正
入力
入力
ニューロン
入力層 中間層 出力層
バイアス
重み
出力
12
2. フルスクラッチ ニューラル ネットワーク (C#)
13
実際にニューラルネットワークを
プログラミング言語 (C#) で
フルスクラッチで書いて理解しよう
ニューラル ネットワークによる分類 (classification)
14
「その座標は福井県か否か?」
•学習データ
1. 郵便局の郵便番号データ
• 地名の一覧を取得
2. Google Maps の API で
緯度・経度に変換
CSV 形式で保存
2値による分類 (Classification)
16
Longitude 136
Latitude 36
Longitude
Latitude
➢ 一般的なアルゴリズムで
解くことはむつかしい
➢ 二次元だとこんな感じ
➢ 二次元の線で分けら...
public class Neuron // ニューロン
{
double sum;
public double Value { get; private set; } = 0.0;
public void Input(IEnumerable<...
C# によるニューラル ネットワークの実装
public class NeuralNetwork // ニューラル ネットワーク
{
// 各層
double[] inputLayer;
Neuron[] middleLayer;
Neuron...
C# によるニューラル ネットワークの実装 (続き)
// 実行
public double Commit((double, double) data)
{
// 各層
inputLayer = new[] { data.Item1, data...
C# によるニューラル ネットワークの実装 (続き)
// 学習 void Learn((double, double, double) data)
{
var outputData = Commit((data.Item1, data.Ite...
C# によるニューラル ネットワークの実装 (続き)
// 学習
public void Learn(IEnumerable<(double, double, double)> dataCollection, int times)
=> tim...
実行結果 (座標データと訓練前)
22
実行結果 (教師データと訓練後)
23
訓練前の重みの値
24
訓練後の重みの値
25
Demo
26
3. ML.NET (C#)
•ML.NET Model Builder → ML.NET (C#)
27
Demo
39
4. Azure Machine Learning → C#
•よくあるシナリオ
1. クラウド (Azure) でトレーニングし、機械学習済みのモデルを作成
• ハイコスト
• ハイパフォーマンスのコンピューター
• 低頻度
2. エッジ デ...
Azure Machine Learning → C# の3つのシナリオ
• 4.1. デザイナーで機械学習
→ API 作成
→ API コール (C#)
• 4.2. Jupyter Notebook (Python) で機械学習/ディープ...
4.1. デザイナーで機械学習
•デザイナーで機械学習
→ API 作成
→ API コール (C#)
Demo
69
4.2. Jupyter Notebook (Python) で機械学習
•Jupyter Notebook (Python) で機械学習
→ ONNX モデル作成
→ ML.NET (C#)
4.2. Jupyter Notebook (Python) で機械学習
•Fujiwo/decode2020: 【de:code 2020】 Azure
Machine Learning Studio と Python と C#/.NET に...
Demo
75
4.3. AutoMLでディープ ラーニング
•AutoMLでディープ ラーニング
→ API 作成
→ API コール (C#)
Demo
103
本日やったこと
1. 機械学習 (ML: Machine Learning)
2. フルスクラッチ ニューラル ネットワーク (C#)
3. ML.NET (C#)
• ML.NET Model Builder → ML.NET (C#)
4....
参考資料
• .NET で AutoML ONNX モデルを使用して予測を行う - Azure Machine Learning | Microsoft Docs
• 自動 ML とは AutoML - Azure Machine Learni...
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
.NETラボ 勉強会 2021年1月 「C#で機械学習」
Upcoming SlideShare
Loading in …5
×

.NETラボ 勉強会 2021年1月 「C#で機械学習」

機械学習の原理と Azure Machine Learning や C# と ML.NET を使った実例

2021年1月23日
https://dotnetlab.connpass.com/event/199890/

  • Be the first to comment

.NETラボ 勉強会 2021年1月 「C#で機械学習」

  1. 1. .NETラボ 勉強会 2021年1月 23th January 2021 Fujio Kojima 『C#で機械学習』
  2. 2. 自己紹介 • 小島 富治雄 • @Fujiwo • 福井コンピュータ グループ • Microsoft MVP (2005-2021)
  3. 3. •BuriKaigi 2021 • オンライン開催! • 2021/01/30 13:30 - 17:30 • オンライン懇親会! with ぶりしゃぶ! 大事な話は最初に! https://toyama-eng.connpass.com/event/198500/
  4. 4. Agenda 1. 機械学習 (ML: Machine Learning) 2. フルスクラッチ ニューラル ネットワーク (C#) 3. ML.NET (C#) • ML.NET Model Builder → ML.NET (C#) 4. Azure Machine Learning → C# 4.1. デザイナーで機械学習 → API 作成 → API コール (C#) 4.2. Jupyter Notebook (Python) で機械学習 → ONNX モデル作成 → ML.NET (C#) 4.3. AutoMLでディープ ラーニング → API 作成 → API コール (C#)
  5. 5. 本日のソースコード • .NET Lab Study Meeging Jan. 2021 「Machine Learning with C#」 | Fujiwo | GitHub • https://github.com/Fujiwo/DotNetLabNeuralNetworkSample202101
  6. 6. 1. 機械学習 (ML: Machine Learning) 人工知能 (AI) 機械学習 (ML) ニューラル ネットワーク 6 Deep Learning
  7. 7. ニューラル ネットワークとは 7
  8. 8. 神経細胞のネットワーク 8
  9. 9. 神経細胞のネットワークを模倣 ニューラル ネットワーク 入力 入力 ・ ・ ・ 出力 出力 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ニューロン 入力層 中間層 出力層 9
  10. 10. 個々のニューロン ニューロン 出力 入力 入力 ・ ・ ・ 入力 バイアス 10
  11. 11. ニューラル ネットワーク 入力 入力 出力 ニューロン 入力層 中間層 出力層 バイアス 重み 11
  12. 12. ニューラル ネットワークの訓練 正解 ー 1. 重みの修正 2. 重みの修正 入力 入力 ニューロン 入力層 中間層 出力層 バイアス 重み 出力 12
  13. 13. 2. フルスクラッチ ニューラル ネットワーク (C#) 13 実際にニューラルネットワークを プログラミング言語 (C#) で フルスクラッチで書いて理解しよう
  14. 14. ニューラル ネットワークによる分類 (classification) 14
  15. 15. 「その座標は福井県か否か?」 •学習データ 1. 郵便局の郵便番号データ • 地名の一覧を取得 2. Google Maps の API で 緯度・経度に変換 CSV 形式で保存
  16. 16. 2値による分類 (Classification) 16 Longitude 136 Latitude 36 Longitude Latitude ➢ 一般的なアルゴリズムで 解くことはむつかしい ➢ 二次元だとこんな感じ ➢ 二次元の線で分けられる ➢ N次元に一般化すると? ➢ N次元空間の面で分ける ➢ 数学的には、テンソル (N次元の値の集まり) の流れ (tensor flow) で考えることができる
  17. 17. public class Neuron // ニューロン { double sum; public double Value { get; private set; } = 0.0; public void Input(IEnumerable<Input> inputData) { inputData.ForEach(input => Input(input.WeightingValue)); Value = Math.Sigmoid(sum); } void Input(double value) => sum += value; } C# によるニューロンの実装 17
  18. 18. C# によるニューラル ネットワークの実装 public class NeuralNetwork // ニューラル ネットワーク { // 各層 double[] inputLayer; Neuron[] middleLayer; Neuron outputLayer; // バイアス double inputLayerBias = 1.0; double middleLayerBias = 1.0; // 各層の重み // 入力層 → 中間層の重み double[,] inputWeight = new double[,] { { RandomWeight, RandomWeight }, { RandomWeight, RandomWeight }, { RandomWeight, RandomWeight } }; // 中間層 → 出力層の重み double[] middleWeight = new[] { RandomWeight, RandomWeight, RandomWeight }; 18
  19. 19. C# によるニューラル ネットワークの実装 (続き) // 実行 public double Commit((double, double) data) { // 各層 inputLayer = new[] { data.Item1, data.Item2, inputLayerBias }; middleLayer = new[] { new Neuron(), new Neuron() }; outputLayer = new Neuron(); // 入力層→中間層 middleLayer.For((index, neuron) => middleLayer[index].Input(ToInputData(inputLayer, inputWeight.GetColumn(index).ToArray()))); // 中間層→出力層 outputLayer.Input(new[] { new Input { Value = middleLayer[0].Value, Weight = middleWeight[0] }, new Input { Value = middleLayer[1].Value, Weight = middleWeight[1] }, new Input { Value = middleLayerBias , Weight = middleWeight[2] } }); return outputLayer.Value; } 19
  20. 20. C# によるニューラル ネットワークの実装 (続き) // 学習 void Learn((double, double, double) data) { var outputData = Commit((data.Item1, data.Item2)); var correctValue = data.Item3; var learningRate = 0.3; // 学習係数 // 出力層→中間層 // δmo = (出力値 - 正解値) × 出力の微分 var daltaMO = (correctValue - outputData) * outputData * (1.0 - outputData); var oldMiddleWeight = middleWeight.Clone() as double[]; // 修正量 = δmo × 中間層の値 × 学習係数 middleLayer.For((index, neuron) => middleWeight[index] += neuron.Value * daltaMO * learningRate); middleWeight[2] += middleLayerBias * daltaMO * learningRate; // 中間層→入力層 // δim = δmo × 中間出力の重み × 中間層の微分 var deltaIM = middleLayer.IndexSelect(index => daltaMO * oldMiddleWeight[index] * middleLayer[index].Value * (1.0 - middleLayer[index].Value)).ToArray(); // 修正量 = δim × 入力層の値 × 学習係数 inputWeight.For((row, column, _) => inputWeight[row, column] += inputLayer[row] * deltaIM[column] * learningRate); } 20
  21. 21. C# によるニューラル ネットワークの実装 (続き) // 学習 public void Learn(IEnumerable<(double, double, double)> dataCollection, int times) => times.Times(() => dataCollection.ForEach(data => Learn(data))); static IEnumerable<Input> ToInputData(double[] inputLayer, double[] inputWeight) => inputLayer.IndexSelect(index => new Input { Value = inputLayer[index], Weight = inputWeight[index] }); readonly static Random random = new Random(); const double weightRange = 10.0; static double RandomWeight => (random.NextDouble() - 0.5) * weightRange; } 21
  22. 22. 実行結果 (座標データと訓練前) 22
  23. 23. 実行結果 (教師データと訓練後) 23
  24. 24. 訓練前の重みの値 24
  25. 25. 訓練後の重みの値 25
  26. 26. Demo 26
  27. 27. 3. ML.NET (C#) •ML.NET Model Builder → ML.NET (C#) 27
  28. 28. Demo 39
  29. 29. 4. Azure Machine Learning → C# •よくあるシナリオ 1. クラウド (Azure) でトレーニングし、機械学習済みのモデルを作成 • ハイコスト • ハイパフォーマンスのコンピューター • 低頻度 2. エッジ デバイスで、そのモデルを利用 • ローコスト • 非力なマシン • 高頻度 40
  30. 30. Azure Machine Learning → C# の3つのシナリオ • 4.1. デザイナーで機械学習 → API 作成 → API コール (C#) • 4.2. Jupyter Notebook (Python) で機械学習/ディープ ラーニング → ONNX モデル作成 → ML.NET (C#) • 4.3. AutoML で機械学習/ディープ ラーニング → API 作成 → API コール (C#)
  31. 31. 4.1. デザイナーで機械学習 •デザイナーで機械学習 → API 作成 → API コール (C#)
  32. 32. Demo 69
  33. 33. 4.2. Jupyter Notebook (Python) で機械学習 •Jupyter Notebook (Python) で機械学習 → ONNX モデル作成 → ML.NET (C#)
  34. 34. 4.2. Jupyter Notebook (Python) で機械学習 •Fujiwo/decode2020: 【de:code 2020】 Azure Machine Learning Studio と Python と C#/.NET に よるディープ ラーニングのサンプル/チュートリアル https://github.com/Fujiwo/decode2020
  35. 35. Demo 75
  36. 36. 4.3. AutoMLでディープ ラーニング •AutoMLでディープ ラーニング → API 作成 → API コール (C#)
  37. 37. Demo 103
  38. 38. 本日やったこと 1. 機械学習 (ML: Machine Learning) 2. フルスクラッチ ニューラル ネットワーク (C#) 3. ML.NET (C#) • ML.NET Model Builder → ML.NET (C#) 4. Azure Machine Learning → C# 4.1. デザイナーで機械学習 → API 作成 → API コール (C#) 4.2. Jupyter Notebook (Python) で機械学習 → ONNX モデル作成 → ML.NET (C#) 4.3. AutoMLでディープ ラーニング → API 作成 → API コール (C#)
  39. 39. 参考資料 • .NET で AutoML ONNX モデルを使用して予測を行う - Azure Machine Learning | Microsoft Docs • 自動 ML とは AutoML - Azure Machine Learning | Microsoft Docs • ONNX: 高パフォーマンスなクロス プラットフォームの推論 - Azure Machine Learning | Microsoft Docs • 自動 ML 分類モデルを作成する - Azure Machine Learning | Microsoft Docs • AutoML を使用して、モデルとデプロイを作成する - Azure Machine Learning | Microsoft Docs • Web サービスとしてデプロイされるモデル用のクライアントを作成する - Azure Machine Learning | Microsoft Docs

×