arrow_back

TensorFlow: Qwik Start

ログイン 参加
知識をテストして、コミュニティで共有しましょう
done
700 を超えるハンズオンラボ、スキルバッジ、コースへのアクセス

TensorFlow: Qwik Start

ラボ 45分 universal_currency_alt クレジット: 1 show_chart 入門
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
知識をテストして、コミュニティで共有しましょう
done
700 を超えるハンズオンラボ、スキルバッジ、コースへのアクセス

GSP637

Google Cloud セルフペース ラボ

概要

このラボでは、ML の基本的な「Hello World」を学びます。ここでは、Java や C++ などの言語で明示的なルールをプログラミングするのではなく、数値間の関係を特定するルールを推論するために、データでトレーニングされるシステムを構築します。

目標

このラボでは、次の方法について学びます。

  • Jupyter ノートブックでの開発環境の設定
  • ML モデルの設計
  • ニューラル ネットワークのトレーニング
  • モデルのテスト

設定と要件

[ラボを開始] ボタンをクリックする前に

こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。

このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。
  • ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、このラボでは使用しないでください。アカウントへの追加料金が発生する可能性があります。

はじめに

フィットネス トラッキング用のアクティビティ認識を実行するシステムの構築に関する問題を考えてみましょう。人の移動速度を認識して、その速度に基づき、以下の条件を使用してアクティビティを推論します。

if(speed<4){ status=WALKING; }
  • 以下の条件を使用して、対象をランニングに拡張できます。
if(speed<4){ status=WALKING; } else { status=RUNNING; }
  • 同様に、以下の条件を使用してサイクリングも検出できます。
if(speed<4){ status=WALKING; } else if(speed<12){ status=RUNNING; } else { status=BIKING; }
  • ここで、ゴルフのようなアクティビティを含めようとしたらどうなるか考えてみましょう。アクティビティを判別するルールの作成方法が複雑になります。
// 次のステップ

ゴルフ アクティビティの検出に役立つプログラムのコードを書き込むのは、非常に難しい作業です。

しかし、ML を使用することでこの問題を解決できます。

ML とは

前のセクションでは、ユーザーのフィットネス アクティビティを判別しようとしたときに問題が発生しました。ゴルフのようなアクティビティを検出するには条件をより複雑にする必要があるため、より多くのコードを書き込めばよいというものではありません。

次の図のように、従来の方法でアプリケーションを構築するとします。

従来型プログラミングの入力をルールとデータ、出力を解答とするフローを示す図

ルールはプログラミング言語で表現します。ルールがデータに適用されると、プログラムから回答が提供されます。アクティビティ検出の場合、回答を導き出すために、ルール(アクティビティの種類を定義するために書き込んだコード)がデータ(人の移動速度)に適用されます。回答とは、ユーザーのアクティビティ ステータス(ウォーキング中、ランニング中、サイクリング中など)を判別する関数の戻り値です。

ML でも、軸が異なるだけで、このアクティビティを検出するプロセスは非常に似ています。

ML の入力を回答とデータ、出力をルールとするフローを示す図

ルールを定義し、それらをプログラミング言語で表現するのではなく、通常は「ラベル」と呼ばれる回答をデータとともに提供します。それを受け、機械が回答とデータの関係を特定するルールを推論します。たとえば、ML のコンテキストでは、アクティビティ検出シナリオは次のようになります。

0 と 1 で表示された 4 つのラベル(ウォーキング、ランニング、サイクリング、ゴルフ)

大量のデータを収集し、ラベルを付けて、「このデータならウォーキング」、「このデータならランニング」というように分類します。それにより、コンピュータが、特定のアクティビティを示す明確なパターンを特定するルールをデータから推論できるようになります。

ML は、このシナリオでプログラミングに代わる手法となるだけでなく、従来のルールベースのプログラミング アプローチでは実現できなかった可能性があるゴルフなどの新たなシナリオを切り開く可能性があります。

従来のプログラミングでは、通常、コードがプログラムと呼ばれるバイナリにコンパイルされます。ML では、データとラベルから作成するアイテムをモデルと呼びます。

再び下の図を見てみましょう。

ML の入力を回答とデータ、出力をルールとするフローを示す図

上の図の結果がモデルであり、実行時には下のように使用されます。

モデルの入力をデータ、出力を予測とするフローを示す図

モデルにデータを渡すと、モデルはトレーニングに基づいて推論したルールを使用して「このデータはウォーキングのようだ」「このデータはサイクリングのようだ」のような予測を行います。

このラボでは、あらゆる ML シナリオで使用できる要素で構成された非常にシンプルな「Hello World」モデルを構築します。

タスク 1. Vertex AI Workbench でノートブックを開く

  1. Google Cloud コンソールのナビゲーション メニューで、[Vertex AI] > [ワークベンチ] をクリックします。

  2. インスタンスを見つけて、[JupyterLab を開く] ボタンをクリックします。

Workbench インスタンスの JupyterLab インターフェースが新しいブラウザタブで開きます。

TensorFlow と追加パッケージのインストール

  1. ランチャー メニューの [その他] から、[ターミナル] を選択します。

  2. ご利用の Python 環境が構成済みかどうかを確認します。ターミナルで次のコマンドをコピーして貼り付けます。

python --version

出力例:

Python 3.10.14
  1. 次のコマンドを実行して TensorFlow パッケージをインストールします。
pip3 install tensorflow
  1. pip3 をアップグレードするには、ターミナルで次のコマンドを実行します。
pip3 install --upgrade pip

Pylint は、Python コード内のエラーをチェックし、Python ソースコードの構文およびスタイル上の問題を強調表示するツールです。

  1. 次のコマンドを実行して pylint パッケージをインストールします。
pip install -U pylint --user
  1. requirements.txt ファイルのラボに必要なパッケージをインストールします。
pip install -r requirements.txt

これで環境が設定されました。

タスク 2. 最初の ML モデルを作成する

以下の数値のセットについて考えてみましょう。数値間の関係がわかりましたか?

X:

-1

0

1

2

3

4

Y:

-2

1

4

7

10

13

左から右に見ていくと、X 値は 1 ずつ増加し、対応する Y 値は 3 ずつ増加していることがわかります。つまり、関係は Y=3X に特定の値を足すか、引いた式になるはずです。

そこで、X が 0 であるときに、対応する Y の値が 1 であることを確認します。

これら 2 つの値から、関係は Y=3X+1 であることがわかります。

コードを使用してニューラル ネットワークと呼ばれるモデルをトレーニングし、データのパターンを見つけるプロセスは、上記とほぼ同じです。

データを使用して、ニューラル ネットワークをトレーニングしましょう。X と Y のセットを提供することで、それらの関係を特定できるようになります。

新しいノートブックの作成とライブラリのインポート

  1. ワークベンチの左側にある + アイコンをクリックして、新しいランチャーを開きます。

  2. ランチャー メニューの [ノートブック] から、[Python3] を選択します。

新しいノートブック ファイル

新しい Jupyter ノートブックが表示されます。Jupyter ノートブックの使用方法の詳細については、Jupyter Notebook Documentation をご覧ください。

  1. Cloud Logging の logginggoogle-cloud-logging をインポートして構成します。最初のセルに、以下のコードを追加します。
import logging import google.cloud.logging as cloud_logging from google.cloud.logging.handlers import CloudLoggingHandler from google.cloud.logging_v2.handlers import setup_logging cloud_logger = logging.getLogger('cloudLogger') cloud_logger.setLevel(logging.INFO) cloud_logger.addHandler(CloudLoggingHandler(cloud_logging.Client())) cloud_logger.addHandler(logging.StreamHandler())
  1. モデルのトレーニングと評価のために tensorflow をインポートします。使いやすいよう、名前を tf にします。最初のセルに次のコードを追加します。
# TensorFlow をインポート import tensorflow as tf
  1. デバッグを目的としてデータを解析するため、numpy をインポートします。使いやすいよう、名前を np にします。最初のセルに次のコードを追加します。
# numpy をインポート import numpy as np
  1. セルを実行するため、[実行] ボタンをクリックするか、Shift + Enter キーを押します。

  2. ノートブックを保存します。[ファイル] > [保存] をクリックします。ファイル名を model.ipynb にして、[OK] をクリックします。

注: 出力に含まれる警告は無視してかまいません。

データの準備

次に、モデルのトレーニングに使用されるデータを準備します。このラボでは、前に使用した 6 つの X と 6 つの Y を使用します。

X:

-1

0

1

2

3

4

Y:

-2

1

4

7

10

13

ご覧のように、X と Y の関係は Y=3x+1 であるため、たとえば X = 1 なら Y = 4 になります。

numpy という Python ライブラリでは、データ提供の事実上の標準方式となっている配列型データ構造が多数提供されています。これらを使用するには、np.array([]) を使用して、numpy で値を配列として指定します。

  1. 2 つ目のセルに、以下のコードを追加します。
xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float) ys = np.array([-2.0, 1.0, 4.0, 7.0, 10.0, 13.0], dtype=float)

モデルの設計

このセクションでは、TensorFlow を使用してモデルを設計します。

ニューラル ネットワークと呼ばれる ML アルゴリズムを使用して、モデルをトレーニングします。できるだけシンプルなニューラル ネットワークを作成します。レイヤは 1 つで、そのレイヤに 1 つのニューロンがあります。ニューラル ネットワークの入力は、一度に 1 つの値のみです。そのため、入力の形状は [1] にする必要があります。

注: ニューラル ネットワークについては、このクエストの後のラボでより詳しく学習します。
  1. 2 つ目のセルに、以下のコードを追加します。
model = tf.keras.Sequential([tf.keras.layers.Dense(units=1, input_shape=[1])])

モデルのコンパイル

次に、ニューラル ネットワークをコンパイルするためのコードを書き込みます。ここでは、損失オプティマイザーの 2 つの関数を指定する必要があります。

ML で数学計算を数多く目にしてきた人は、通常ならここでそれを使用しますが、tf.keras が数学計算を関数内にうまくカプセル化してくれます。

  • 事前の検証により、数値の関係が y=3x+1 であることがわかっています。

  • この関係を学習しようとするコンピュータは、たとえば y=10x+10 と推測します。損失関数は、推測された回答を既知の正しい回答と比較し、推測の精度を測定します。

注: tf.keras で使用できるさまざまな種類の損失関数の詳細については、Module: tf.keras.losses ドキュメントをご覧ください。
  • 次に、モデルでオプティマイザー関数を使用して推測が再実行されます。損失関数の結果に基づいて、損失の最小化が試みられます。この時点では、たとえば y=5x+5 と推測されます。この推測は依然として精度が低いですが、正しい結果に近づいています(損失が減少しています)。
注: tf.keras で使用できるさまざまな種類のオプティマイザーの詳細については、Module: tf.keras.optimizers ドキュメントをご覧ください。
  • モデルで、指定したエポックの数に達するまでこの処理が繰り返されます。
  1. 2 つ目のセルに次のコードを追加します。
model.compile(optimizer=tf.keras.optimizers.SGD(), loss=tf.keras.losses.MeanSquaredError())

上のコード スニペットで、損失には mean_squared_error、オプティマイザーには stochastic gradient descent (sgd) を使用するようモデルに指示します。これらの数学計算は、まだ理解する必要はありませんが、役に立つことはわかるはずです。

注: さまざまなシナリオに適した損失関数とオプティマイザー関数については、今後学習していきます。

ニューラル ネットワークのトレーニング

ニューラル ネットワークをトレーニングして X と Y の関係を「学習」させるには、model.fit を使用します。

この関数により、推測、その精度(損失)の測定、オプティマイザーを使用した推論の再実行などのループでモデルをトレーニングします。指定したエポックの数(このラボでは 500)に達するまで、このプロセスが繰り返されます。

  1. 2 つ目のセルに次のコードを追加します。
model.fit(xs, ys, epochs=500)

上のコードでは、model.fit により、指定されたエポック数に達するまでモデルのトレーニングが繰り返されます。

注: model.fit の詳細については、tf.keras.Model ドキュメントの fit セクションをご覧ください。

この時点で、ファイルは次のようになります(コードは 2 つの異なるセルに含まれます)。

import logging import google.cloud.logging as cloud_logging from google.cloud.logging.handlers import CloudLoggingHandler from google.cloud.logging_v2.handlers import setup_logging cloud_logger = logging.getLogger('cloudLogger') cloud_logger.setLevel(logging.INFO) cloud_logger.addHandler(CloudLoggingHandler(cloud_logging.Client())) cloud_logger.addHandler(logging.StreamHandler()) import tensorflow as tf import numpy as np xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float) ys = np.array([-2.0, 1.0, 4.0, 7.0, 10.0, 13.0], dtype=float) model = tf.keras.Sequential([tf.keras.layers.Dense(units=1, input_shape=[1])]) model.compile(optimizer=tf.keras.optimizers.SGD(), loss=tf.keras.losses.MeanSquaredError()) model.fit(xs, ys, epochs=500)

コードの実行

スクリプトの準備ができました。実行してどうなるか見てみましょう。

  1. [実行] ボタンをクリックするか、Shift + Enter キーを押して、ノートブックの 2 つ目のセルを実行します。

  2. 出力を確認します。スクリプトで、各エポックの損失が印刷されることを確認します。出力は、ここに示されているものと若干異なる可能性があります。

注: 値に e- が付いた数は、指数が負の科学的記数法で表示されています。

エポックをスクロールすると、損失値が最初の数エポックでは非常に大きいものの、ステップごとに小さくなっていることがわかります。たとえば、次のようになります。

徐々に減少するエポック損失の行。エポック損失は 2 行目では 52.1992、9 行目では 9.7403

トレーニングが進むと、損失が非常に小さくなります。

エポック損失は 45 行目で 0.0023、54 行目で 7.1057e-04

トレーニングが完了するまでには損失が極めて小さくなり、モデルによる数値間の関係の推論精度が非常に向上したことが示されています。

エポック損失は 495 行目で 5.4194e-08、500 行目で 4.8896e-08

おそらく 500 のエポックすべてを確認する必要はないので、別の値を試してみましょう。この例を見ると、損失は 50 エポックのみで非常に小さくなるため、値は 50 で十分かもしれません。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 ML モデルを作成する

モデルの使用

X と Y の関係を学習するよう、モデルをトレーニングしました。

model.predict メソッドを使用して、モデルのトレーニング中には出現しなかった X に対する Y を割り出すことができます。たとえば、X = 10 である場合の Y はどうなるでしょうか。

  1. 3 つ目のセルに次のコードを追加して、予測を行います。
cloud_logger.info(str(model.predict(np.array([10.0])))) 注: クラウドログを生成して進行状況を確認できるよう、予測結果は cloud_logger に渡されます。
  1. Ctrl+S キーを押すか、[ファイル] -> [保存] をクリックして、ノートブックを保存します。

  2. 3 つ目のセルを実行するため、[実行] ボタンをクリックするか、Shift + Enter キーを押します。

Y 値がトレーニング ログ(エポック)の後に表示されます。

出力例:

Y 値は 31.005917

Y=31 になると思っていたかもしれません。しかし、実際はそれをわずかに上回る値(31.005917)でした。なぜでしょう。

答え: ニューラル ネットワークは確率を扱います。X と Y の関係が Y=3X+1 である可能性が非常に高いと計算されました。しかし、6 つのデータポイントだけではその確証がありません。そのため、10 に対する結果は 31 に非常に近くなりますが、必ずしも 31 にはなりません。

ニューラル ネットワークでは、このパターンが繰り返されます。ほとんどの場合は確実性ではなく確率を扱い、特に分類に関しては、確率に基づいて結果を割り出すためにコーディングを少しだけ行います。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。モデルを使用する

お疲れさまでした

これで完了です。このラボでは、TensorFlow を使用して独自の ML モデルを作成、トレーニング、テストしました。

次のステップと詳細情報

Google Cloud トレーニングと認定資格

Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。

マニュアルの最終更新日: 2024 年 9 月 16 日

ラボの最終テスト日: 2024 年 9 月 16 日

Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします