View in English

  • メニューを開く メニューを閉じる
  • Apple Developer
検索
検索を終了
  • Apple Developer
  • ニュース
  • 見つける
  • デザイン
  • 開発
  • 配信
  • サポート
  • アカウント
次の内容に検索結果を絞り込む

クイックリンク

5 クイックリンク

ビデオ

メニューを開く メニューを閉じる
  • コレクション
  • トピック
  • すべてのビデオ
  • 利用方法

その他のビデオ

ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。

  • 概要
  • トランスクリプト
  • コード
  • Swiftを使用したCreate MLでのトレーニング管理

    Create MLフレームワークを使用することで、これまで以上にモデルを簡単に開発し、ワークフローを自動化できます。ここでは、より良いモデルを素早く得るために、機械学習モデルをトレーニングしながら、機械学習モデルを管理する方法について説明します。Create MLにおけるトレーニング管理によって、チェックポイントAPIを使用してトレーニングワークフローをカスタマイズして、トレーニングプロセスを一時停止、保存、再開、および拡張する方法を紹介します。また、Combine APIを使用して、プログラムで進捗をモニターする方法についても学びます。 まだCreate MLに精通しておらず、トレーニング機械学習モデルに興味がある場合は、必ず “Introducing the Create ML App”をご視聴ください。

    リソース

    • Create ML
      • HDビデオ
      • SDビデオ

    関連ビデオ

    WWDC21

    • Create MLフレームワークを使ったダイナミックなiOS Appの構築

    WWDC20

    • Create MLにおけるImage and Video Style Transferモデルの作成
    • Create MLを使用したアクションクラシファイアの構築

    WWDC19

    • Create ML Appの紹介
  • ダウンロード

    こんにちは WWDCへようこそ “Swiftを使用したCreate MLでの トレーニング管理” 私の名前はリジー Create MLのMachine Learingマネージャーです Create MLでのチェックポイントや 非同期トレーニングの新しいAPIを紹介します Create MLアプリケーションと そのフレームワークについて説明します Create MLアプリケーションでコードを書かずに モデルを作成できます

    使いやすいAPI Create MLで アプリケーションがパワーアップします macOS Big Surには ワークフロー管理のための パワフルで柔軟なAPIがあり 機械学習モデル作成のカスタマイズをし アプリケーション作動と同じ技術で利用可能です トレーニングプロセスのおさらいです

    モデルをトレーニングするなら まず データ収集です

    トレーニングオプションを 閲覧して下さい もちろん デフォルトの設定は可能ですが オプションの知識も無駄にはなりません

    前処理で 特徴抽出や適切な構造への データ変換が必要な場合があります 音声をスペクトログラムで変換したり ビデオはフレームごとに 抽出したキーポイントでしょう

    そして トレーニングですが 後ほど 詳しく説明したいので 一旦 次に進みます

    新しいデータを提示し モデルを評価します モデルがトレーニング中に表示しない データセットを使用すれば トレーニング例の記憶ではなく モデルの一般化を決定できます この時点で データが少ないので 期待はずれに感じる方々は 別のパラメータや トレーニング時間が必要なのかも モデル開発は反復的なプロセスで 要求を満たすまで設定やトレーニングをします

    トレーニング済みのモデルで 予測を実行し デプロイの準備は完了

    では 管理について説明します トレーニング管理には 一時停止や再開の機能があり

    プロセスの監視や変更の機能もあります

    いつでもトレーニングの中止が可能です

    機械学習モデルのトレーニングは 時間がかかります オブジェクト検出モデルには 5時間かかる場合もあります 例えば トレーニング開始後 最大イテレーション値に到達します

    損失減少していて モデルの収束値に まだ余裕がある場合 ゼロから始めて 最大値を選択する必要がありましたが これからは 中止した地点から再開できます

    目的に対して結果が 限定されていることが重要で 埋め込み式で数値を決める場合 最善の結果は必要はありません 例えば 性質が独特なStyle Transferで 魚のモザイクをダンサーの写真に 適用しようとしています ユーザーの判断で 中止を決めることができ その選択は必要に応じて特定できます プロトタイプが必要で 時間をかけたくない人や 最高の結果を求め トレーニングする人もいるでしょう トレーニング管理により 停止条件を定義でき イテレーション回数を制限する必要はありません 画像分類でターゲットの精度が必要な人や 時間に余裕のない人もいるでしょう

    トレーニング管理はCreate MLアプリケーションか カスタマイズもできるAPIで利用可能です ご説明します

    以前は モデルコンストラクタを呼び出し トレーニング後 返却しました

    新しい非同期APIでは ジョブ返却の メソッドの呼び出しが可能です

    通常のパラメータと セッションパラメータを受け取り 報告の流れと イテレーションの合計値を指定します 変数を省略し デフォルト使用も可能です

    sessionParametersの最初の変数は sessionDirectoryです 既存のものがなければ ディレクトリが作成され セッション再開のために そのコンテンツが使用されます 新しいセッションを希望する場合は 削除するか 新しい場所を選択します

    進行報告とチェックポイントの頻度を 制御する変数が 小さければ 更新は頻繁ですが コストパフォーマンスは良くないでしょう

    最後の変数はイテレーションの合計値で この値で停止します この値は 呼び出しの際に増やしたり 到達する前に停止したりできます

    返却されるジョブは 有効なジョブを示す MLJobのインスタンスで 進行状況やチェックポイントや 結果のパブリッシャーなどが含まれます

    WWDC19の“Introducing Combine”と “Combine in Practice”で参照できる― Combineフレームワークの 知識を深めます

    キャンセルメソッドで 簡単にトレーニングを中止できます トレーニング済みのモデルの取得に 結果パブリッシャーを使用します まず sinkを記録すると 完了時に 最初のクロージャが呼び出され 結果が分かります エラーとなった場合は ここで解決する必要があります

    完了したら 次のクロージャで 最終モデルを受け取り

    サブスクリプションを保存します

    完成したフラクションや 進行中のイテレーションやその合計値― それに カスタム指標などの 進行状況を監視できます

    MLJobの進行状況パブリッシャーで 確認や印刷が可能です これがファンデーションからの 進行状況の標準インスタンスです カスタム指標にアクセスするため sinkクロージャを記録します 予防措置として ジョブをわずかにキャプチャし 保存サイクルを回避します

    ジョブを確認しMLProgressの インスタンスを作成します ヘルパータイプがインスタンスから カスタム指標へのアクセスを可能にします 新しいセッションが作成されたり 新しいフェーズが始まる時は 初期化できない可能性もあります しかし すぐに返却し解決します

    そして 最新のアイテムや合計数などの 進行情報にアクセスできます 特徴抽出において アイテムとは 現在処理中のファイルやレコードのことで トレーニングでは 現在のイテレーション値を指します 最後に受け取る トレーニング指標は トレーニングフェーズでのみ利用可能で 各タスクに特有のものです タスクは精度が高いものや 減損や他の指標を持つものもあります 検証データを提供すれば 検証指標にアクセスできるでしょう さあ 新しいAPIを使用した モデルのトレーニング法を紹介します

    Create MLでの スタイル転送モデルについての動画を見て モデル作成ワークフローの設定を Playgroundsで始めました リソースバンドルで使用できる スタイルの画像と 様式化したいアーティストの 認識画像もあります

    まず 希望するスタイルや認識画像に URLを指定します

    Playgroundsでは データインラインを可視化できます 指定したスタイルや 使用する認識画像を確認できます

    次に トレーニングデータの定義のため dataSourceを指定し styleImageURLと contentDirectoryを渡します

    そして セッションを設定する パラメータを初期化します

    sessionDirectoryの取得に MLTrainingSessionParametersとします reportIntervalで進行報告の回数と checkpointIntervalで回数を指定し iterationsでトレーニングの延長をします

    次に モデルパラメータを設定します

    トレーニングの準備ができました

    まず 作りたいモデルタイプに trainメソッドを呼び出します

    データソースを指定します

    trainingParametersと

    sessionParametersを設定します

    これをMLJobインスタンスに戻します MLJobには結果パブリッシャーがあり トレーンング中のエラー受信や 実行したモデルへのアクセスが可能です

    実行中の制御や監視に ジョブを使うことも可能です 進行状況のパブリッシャーで 計画的に確認することもできます Foundation Progressのインスタンスなので キーパスにプロパティを提供することで fractionCompletedを定義します

    次にsinkを呼び出し subscription終了のため cancellableを戻します fractionCompleted以外にも MLモデル特有の メトリクスにアクセス可能で Foundation Progressから MLProgressのインスタンスを初期化します イテレーションによる スタイルやコンテンツの 損失など 特定のメトリクスにアクセスできます

    XcodeのPlaygroundを利用し trainで 実行中の進行状態を視覚化できます

    トレーニング進行状況の最新値やグラフを 確認できるのは大変便利です

    一時停止や再開や延長により トレーニング進行の制御可能で 停止には ジョブのcanceを呼び出すだけです

    再開には 同じセッションのディレクトリで trainを呼び出すくらい簡単で

    ほとんど自動です 新しい非同期APIを使った モデルトレーニング方法の説明には チェックポイントについてもあります チェックポイントで 時間をかけて モデルの状態をキャプチャでき トレーニングの進行状況や 過去の結果との比較を確認できます まだトレーニングが必要なら 停止した時点から再開できます

    MLCheckpointは トレーニングか特徴抽出を表す構造で

    他のフレームワークと違い 新しい非同期APIを使うと自動的に構築されます

    再開が簡単です 新しいセッションか既存のセッションに sessionDirectoryを設定します Playgroundsのような環境で 進行を失わずに反復できるのは優秀です

    トレーニングプロセスに戻りましょう 前処理とトレーニングに注目します チェックポイントが生成した場所に 2つのフェーズがあります

    まず 前処理です

    個別ファイルや何行ものデータ要素を取得し それぞれに処理します 進行状況は要素の処理数で計測されます

    数個の要素ごとに チェックポイントとして進行状況を蓄積し 厳密に付加され 最後の前処理の チェックポイントだけを保持します

    トレーニングフェーズは 反復プロセスでもあります イテレーションという個別の段階で モデルは改良され ネットワークのデータ使用量や損失計算や 重量を更新して構成されます トレーニングのチェックポイントは 特定のイテレーションでのモデルの状態で 前処理と違い 作成するすべての チェックポイントを保存します 進行すると 損失や精度などの メトリクスも取得でき 特定できるように チェックポイントと一緒に保存されます

    コードを見ましょう チェックポイントの パブリッシャーの使用例です チェックポイントは自動的に セッションフォルダに保存されますが カスタム指標やモデルの生成 またはトレーニングの完全停止を可能にします 新しいチェックポイントで 実行する機会となります

    これはチェックポイントから モデルを生成する方法で ディスクへの保存や予測も可能です

    モデル作成可能なのは 特徴抽出ではなく トレーニングのチェックポイントからなので 確認するのはトレーニングフェーズです

    画像や音声や動作の分類用の特徴抽出 フェーズ中にチェックポイント作成が可能で 動作分類や物体検知や画風変換 そして活動分類で利用できます そして セッションはチェックポイントと メタデータの集計と考えましょう MKTrainingSessionタイプにより 表示されます セッション作成日やトレーニングフェーズや イテレーション数などの照会が可能です

    直接のアクセス希望なら モデルタイプに restoreTrainingSessionメソッドが使え

    損失値へのアクセスなども可能です 不必要なチェックポイントの 削除もできます では 動作中の チェックポイントを見ましょう

    PlaygroundsでMLJobのインスタンスから 進行や結果の監視方法を確認しました MLJobにチェックポイント監視用の パブリッシャーがあるか確認できます StyleTransfer用に 進行状況を視覚化するため 各チェックポイントで 定型化した認証画像にアクセスします

    compactMapを使い チェックポイントを必要な形式に変換し imageURLをNSImageにマップします sinkを呼び出し パブリッシャーに subscriberを貼り付けたり subscriptionリストに AnyCancellableタイプを保存します

    トレーニング中に 定型化した認証画像を 埋め込み型で見ることができます

    できることは まだあります SwiftUIを使いPlayground Live Viewで 簡単にレンダリングできます まず 新しいビューオブジェクトを見つけ スタイルの画像や定型化した認証画像や オリジナル認証に渡します モデルの機能性を 時間をかけて比較できます UIの使用により メインキューからの 受け取りが可能です Playground Live Viewを設定すれば 結果を蓄積することができます

    モデルを視覚化できるのは 参照スタイルや 認証画像に加えてトレーニングしたからで 新しいチェックポイントや APIのおかげです

    では 確認しましょう CreateMLの新しい非同期APIで モデルのトレーニング方法を学びました チェックポイントやモデルの生成 トレーニングの再開 それから― 進行レポートや結果処理のための Combineパブリッシャーの使用法です トレーニングワークフローのカスタマイズが 必要なら この新しいツールを利用して下さい トレーニング管理はモデルの性能も 進行状態も制御でき モデルの開発やワークフローの自動化や macOSアプリケーションに応じた モデルを作成できます ご視聴ありがとうございました

    • 4:39 - Synchronous training

      let model = try MLActivityClassifier(...)
    • 4:47 - Asynchronous Training

      let job = try MLActivityClassifier.train(..., sessionParameters: sessionParameters)
    • 4:58 - Setting up training parameters

      // Session parameters can be provided to `train` method.
      let sessionParameters = MLTrainingSessionParameters(
          sessionDirectory: sessionDirectory,
          reportInterval: 10,
          checkpointInterval: 100,
          iterations: 1000
      )
      
      let job = try MLActivityClassifier.train(..., sessionParameters: sessionParameters)
    • 6:21 - Register a sink to receive model

      // Register a sink to receive the resulting model.
      job.result.sink { result in
          // Handle errors
      }
      receiveValue: { model in
          // Use model
      }
      .store(in: &subscriptions)
    • 7:07 - Getting training progress

      // Observing progress details
      job.progress.publisher(for: \.fractionCompleted)
          .sink { [weak job] fractionCompleted in
              guard let job = job, let progress = MLProgress(progress: job.progress) else {
                  return
              }
              print("Progress: \(fractionCompleted)")
              print("Iteration: \(progress.itemCount) of \(progress.totalItemCount ?? 0)")
              print("Accuracy: \(progress.metrics[.accuracy] ?? 0.0)")
          }
          .store(in: &subscriptions)
    • 8:55 - Demo 1: Setup

      let style = NSImage(byReferencing: styleImageURL)
      let validation = NSImage(byReferencing: validationImageURL)
      
      var iterations = 500
      var progressInterval = 5
      var checkpointInterval = 5
      let sessionDirectory = URL(fileURLWithPath: "\(NSHomeDirectory())/\(experimentID)")
      
      let sessionParameters = MLTrainingSessionParameters(sessionDirectory: sessionDirectory,
                                                          reportInterval: progressInterval,
                                                          checkpointInterval: checkpointInterval,
                                                          iterations: iterations)
      
      let trainingParameters = MLStyleTransfer.ModelParameters(
        	algorithm: .cnn,
          validation: .content(validationImageURL),
          maxIterations: iterations,
          textelDensity: 416,
          styleStrength: 5)
    • 10:03 - Demo 1: Training

      var subscriptions = [AnyCancellable]()
      
      let job = try MLStyleTransfer.train(trainingData: dataSource,
                                          parameters: trainingParameters,
                                          sessionParameters: sessionParameters)
      
      job.result.sink { result in
          print(result)
      }
      receiveValue: { model in
          try? model.write(to: sessionDirectory)
      }
      .store(in: &subscriptions)
    • 10:51 - Demo 1: Progress

      job.progress
          .publisher(for: \.fractionCompleted)
          .sink { completed in
              
              _ = completed
              
              guard let progress = MLProgress(progress: job.progress) else { return }
              
              if let styleLoss = progress.metrics[.styleLoss] { _ = styleLoss }
              
              if let contentLoss = progress.metrics[.contentLoss] { _ = contentLoss }
              
          }
          .store(in: &subscriptions)
    • 12:04 - Demo 1: Cancel & Resume

      job.cancel()
      
      let resumedJob = try MLStyleTransfer.train(
          trainingData: dataSource,
          parameters: trainingParameters,
          sessionParameters: sessionParameters)
      
      resumedJob.progress
          .publisher(for: \.fractionCompleted)
          .sink { completed in
              _ = completed
              
              guard let progress = MLProgress(progress: resumedJob.progress) else { return }
              if let styleLoss = progress.metrics[.styleLoss] { _ = styleLoss }
              if let contentLoss = progress.metrics[.contentLoss] { _ = contentLoss }
          }
          .store(in: &subscriptions)
      
      resumedJob.result.sink { result in
          print(result)
      }
      receiveValue: { model in
          try? model.write(to: sessionDirectory)
      }
      .store(in: &subscriptions)
    • 14:26 - Observing checkpoints

      let job = try MLActivityClassifier.train(..., sessionParameters: sessionParameters)
      
      // Register for receiving checkpoints.
      job.checkpoints.sink { checkpoint in
          // Process checkpoint
      }
      .store(in: &subscriptions)
    • 14:50 - Generating a model from a checkpoint

      // Generate a model from a checkpoint
      guard checkpoint.phase == .training else {
          // Not a training checkpoint, can't create model yet.
          return
      }
      
      let model = try MLActivityClassifier(checkpoint: checkpoint)
      try model.write(to: url)
    • 15:40 - Working with a session

      let session = MLObjectDetector.restoreTrainingSession(sessionParameters: sessionParameters)
      
      let losses = session.checkpoints.compactMap { $0.metrics[.loss] as? Double }
    • 15:48 - Removing checkpoints from a session

      let session = MLObjectDetector.restoreTrainingSession(sessionParameters: sessionParameters)
      
      // Save space by removing some checkpoints
      session.removeCheckpoints { $0.iteration < 500 }
    • 16:13 - Demo 2: Visualizing Style Transfer Checkpoints

      job.checkpoints
          .compactMap { $0.metrics[.stylizedImageURL] as? URL }
          .map { NSImage(byReferencing: $0) }
          .sink { image in
              let _ = image
          }
          .store(in: &subscriptions)
    • 16:24 - Demo 2: Visualizing Checkpoints with SwiftUI + Live View

      job.checkpoints
          .compactMap { $0.metrics[.stylizedImageURL] as? URL }
          .receive(on: DispatchQueue.main)
          .map { NSImage(byReferencing: $0) }
          .sink { image in
              let _ = image
              
              let view = VStack {
                  Image(nsImage: image)
                      .resizable()
                      .aspectRatio(contentMode: .fit)
                  Image(nsImage: style)
                      .resizable()
                      .aspectRatio(contentMode: .fit)
                  Image(nsImage: validation)
                      .resizable()
                      .aspectRatio(contentMode: .fit)
              }.frame(maxHeight: 1400)
              
              PlaygroundSupport.PlaygroundPage.current.setLiveView(view)  
          }
          .store(in: &subscriptions)
  • 特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。

    クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。

Developer Footer

  • ビデオ
  • WWDC20
  • Swiftを使用したCreate MLでのトレーニング管理
  • メニューを開く メニューを閉じる
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    メニューを開く メニューを閉じる
    • アクセシビリティ
    • アクセサリ
    • App Extension
    • App Store
    • オーディオとビデオ(英語)
    • 拡張現実
    • デザイン
    • 配信
    • 教育
    • フォント(英語)
    • ゲーム
    • ヘルスケアとフィットネス
    • アプリ内課金
    • ローカリゼーション
    • マップと位置情報
    • 機械学習
    • オープンソース(英語)
    • セキュリティ
    • SafariとWeb(英語)
    メニューを開く メニューを閉じる
    • 英語ドキュメント(完全版)
    • 日本語ドキュメント(一部トピック)
    • チュートリアル
    • ダウンロード(英語)
    • フォーラム(英語)
    • ビデオ
    Open Menu Close Menu
    • サポートドキュメント
    • お問い合わせ
    • バグ報告
    • システム状況(英語)
    メニューを開く メニューを閉じる
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles(英語)
    • フィードバックアシスタント
    メニューを開く メニューを閉じる
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program(英語)
    • News Partner Program(英語)
    • Video Partner Program(英語)
    • セキュリティ報奨金プログラム(英語)
    • Security Research Device Program(英語)
    Open Menu Close Menu
    • Appleに相談
    • Apple Developer Center
    • App Store Awards(英語)
    • Apple Design Awards
    • Apple Developer Academy(英語)
    • WWDC
    Apple Developerアプリを入手する
    Copyright © 2025 Apple Inc. All rights reserved.
    利用規約 プライバシーポリシー 契約とガイドライン