Skip to content

ClasCat® AI Research

クラスキャット – 生成 AI, AI エージェント, MCP

Menu
  • ホーム
    • ClassCat® AI Research ホーム
    • クラスキャット・ホーム
  • OpenAI API
    • OpenAI Python ライブラリ 1.x : 概要
    • OpenAI ブログ
      • GPT の紹介
      • GPT ストアの紹介
      • ChatGPT Team の紹介
    • OpenAI platform 1.x
      • Get Started : イントロダクション
      • Get Started : クイックスタート (Python)
      • Get Started : クイックスタート (Node.js)
      • Get Started : モデル
      • 機能 : 埋め込み
      • 機能 : 埋め込み (ユースケース)
      • ChatGPT : アクション – イントロダクション
      • ChatGPT : アクション – Getting started
      • ChatGPT : アクション – アクション認証
    • OpenAI ヘルプ : ChatGPT
      • ChatGPTとは何ですか?
      • ChatGPT は真実を語っていますか?
      • GPT の作成
      • GPT FAQ
      • GPT vs アシスタント
      • GPT ビルダー
    • OpenAI ヘルプ : ChatGPT > メモリ
      • FAQ
    • OpenAI ヘルプ : GPT ストア
      • 貴方の GPT をフィーチャーする
    • OpenAI Python ライブラリ 0.27 : 概要
    • OpenAI platform
      • Get Started : イントロダクション
      • Get Started : クイックスタート
      • Get Started : モデル
      • ガイド : GPT モデル
      • ガイド : 画像生成 (DALL·E)
      • ガイド : GPT-3.5 Turbo 対応 微調整
      • ガイド : 微調整 1.イントロダクション
      • ガイド : 微調整 2. データセットの準備 / ケーススタディ
      • ガイド : 埋め込み
      • ガイド : 音声テキスト変換
      • ガイド : モデレーション
      • ChatGPT プラグイン : イントロダクション
    • OpenAI Cookbook
      • 概要
      • API 使用方法 : レート制限の操作
      • API 使用方法 : tiktoken でトークンを数える方法
      • GPT : ChatGPT モデルへの入力をフォーマットする方法
      • GPT : 補完をストリームする方法
      • GPT : 大規模言語モデルを扱う方法
      • 埋め込み : 埋め込みの取得
      • GPT-3 の微調整 : 分類サンプルの微調整
      • DALL-E : DALL·E で 画像を生成して編集する方法
      • DALL·E と Segment Anything で動的マスクを作成する方法
      • Whisper プロンプティング・ガイド
  • Gemini API
    • Tutorials : クイックスタート with Python (1) テキスト-to-テキスト生成
    • (2) マルチモーダル入力 / 日本語チャット
    • (3) 埋め込みの使用
    • (4) 高度なユースケース
    • クイックスタート with Node.js
    • クイックスタート with Dart or Flutter (1) 日本語動作確認
    • Gemma
      • 概要 (README)
      • Tutorials : サンプリング
      • Tutorials : KerasNLP による Getting Started
  • Keras 3
    • 新しいマルチバックエンド Keras
    • Keras 3 について
    • Getting Started : エンジニアのための Keras 入門
    • Google Colab 上のインストールと Stable Diffusion デモ
    • コンピュータビジョン – ゼロからの画像分類
    • コンピュータビジョン – 単純な MNIST convnet
    • コンピュータビジョン – EfficientNet を使用した微調整による画像分類
    • コンピュータビジョン – Vision Transformer による画像分類
    • コンピュータビジョン – 最新の MLPモデルによる画像分類
    • コンピュータビジョン – コンパクトな畳込み Transformer
    • Keras Core
      • Keras Core 0.1
        • 新しいマルチバックエンド Keras (README)
        • Keras for TensorFlow, JAX, & PyTorch
        • 開発者ガイド : Getting started with Keras Core
        • 開発者ガイド : 関数型 API
        • 開発者ガイド : シーケンシャル・モデル
        • 開発者ガイド : サブクラス化で新しい層とモデルを作成する
        • 開発者ガイド : 独自のコールバックを書く
      • Keras Core 0.1.1 & 0.1.2 : リリースノート
      • 開発者ガイド
      • Code examples
      • Keras Stable Diffusion
        • 概要
        • 基本的な使い方 (テキスト-to-画像 / 画像-to-画像変換)
        • 混合精度のパフォーマンス
        • インペインティングの簡易アプリケーション
        • (参考) KerasCV – Stable Diffusion を使用した高性能画像生成
  • TensorFlow
    • TF 2 : 初級チュートリアル
    • TF 2 : 上級チュートリアル
    • TF 2 : ガイド
    • TF 1 : チュートリアル
    • TF 1 : ガイド
  • その他
    • 🦜️🔗 LangChain ドキュメント / ユースケース
    • Stable Diffusion WebUI
      • Google Colab で Stable Diffusion WebUI 入門
      • HuggingFace モデル / VAE の導入
      • LoRA の利用
    • Diffusion Models / 拡散モデル
  • クラスキャット
    • 会社案内
    • お問合せ
    • Facebook
    • ClassCat® Blog
Menu

TensorFlow : Guide : Estimators : Estimator のためのデータセット

Posted on 03/18/2018 by Sales Information

TensorFlow : Guide : Estimators : Estimator のためのデータセット (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
更新日時 : 07/14/2018
作成日時 : 03/18/2018

* TensorFlow 1.9 でドキュメント構成が変わりましたので調整しました。
* 本ページは、TensorFlow の本家サイトの Guide – Datasets for Estimators を翻訳した上で適宜、補足説明したものです:

  • https://www.tensorflow.org/guide/datasets_for_estimators

* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

序

tf.data モジュールはクラスのコレクションを含み、これらは簡単にデータをロードし、それを操作し、それを貴方のモデルに運ぶことを可能にします。このドキュメントは2つの単純なサンプルを一通り説明することで API を紹介します :

  • numpy 配列から in-memory データを読む。
  • csv ファイルから行を読む。

 

基本入力

配列からスライスを取ることは tf.data で始めるために最も単純な方法です。

Premade Estimator の章ではデータを Estimator にパイプするために iris_data.py からの次の train_input_fn を記述しています :

def train_input_fn(features, labels, batch_size):
    """An input function for training"""
    # Convert the inputs to a Dataset.
    dataset = tf.data.Dataset.from_tensor_slices((dict(features), labels))

    # Shuffle, repeat, and batch the examples.
    dataset = dataset.shuffle(1000).repeat().batch(batch_size)

    # Build the Iterator, and return the read end of the pipeline.
    return dataset.make_one_shot_iterator().get_next()

これをより密接に見てみましょう。

 

引数

この関数は3つの引数を想定しています。
「配列」を想定する引数は numpy.array で配列に変換できるどのようなものでも殆ど受け取ることができます。

一つの例外は タプル で、これは Datasets のために特別な意味を持ちます。

  • features: 生の入力特徴を含む {‘feature_name’:array} 辞書 (または DataFrame) です。
  • labels : 各サンプルのための ラベル を含む配列です。
  • batch_size : 望まれるバッチサイズを示す整数。

premade_estimator.py では iris_data.load_data() 関数を使用してアイリス・データを回収します。貴方はそれを実行して、次のように結果をアンパックすることができます :

import iris_data

# Fetch the data
train, test = iris_data.load_data()
features, labels = train

それからこれに類似した行でこのデータを入力関数に渡しました :

batch_size=100
iris_data.train_input_fn(features, labels, batch_size)

train_input_fn() を一通り見てみましょう。

 

スライス

最も単純なケースでは、tf.data.Dataset.from_tensor_slices 関数は配列を取り配列のスライスを表わす tf.data.Dataset を返します。例えば、mnist 訓練データ を含む配列は shape (60000, 28, 28) を持ちます。これを from_tensor_slices に渡すと 60000 スライスを含む Dataset オブジェクトを返し、各々の一つは 28×28 画像です。

Dataset を返すコードは次のようなものです :

train, test = tf.keras.datasets.mnist.load_data()
mnist_x, mnist_y = train

mnist_ds = tf.data.Dataset.from_tensor_slices(mnist_x)
print(mnist_ds)

これは次の行をプリントし、dataset の項目の shape と 型 を示します。dataset はそれが幾つの項目を含むかは知らないことに注意してください。

<TensorSliceDataset shapes: (28,28), types: tf.uint8>

上の dataset は単純な配列のコレクションを表しますが、dataset はこれよりも遥かによりパワフルです。dataset は辞書かタプルのネストされた組み合わせを透過的に処理します。例えば、次のように features が標準的な辞書であることを確かなものとしてから、配列の辞書を辞書の dataset に変換することができます :

dataset = tf.data.Dataset.from_tensor_slices(dict(features))
print(dataset)
<TensorSliceDataset

  shapes: {
    SepalLength: (), PetalWidth: (),
    PetalLength: (), SepalWidth: ()},

  types: {
      SepalLength: tf.float64, PetalWidth: tf.float64,
      PetalLength: tf.float64, SepalWidth: tf.float64}
>

ここで Dataset が構造化された要素を含むとき、Dataset の shape と型は同じ構造を持つことを見ることができます。この dataset は スカラー の辞書を含み、総てが tf.float64 型です。

train_input_fn の最初の行は同じ機能を使用しますが、構造の他のレベルも追加します。それは (features, labels) ペアを含む dataset を作成します。

次のコードは label が int64 型のスカラーであることを示します。

# Convert the inputs to a Dataset.
dataset = tf.data.Dataset.from_tensor_slices((dict(features), labels))
print(dataset)
<TensorSliceDataset
    shapes: (
        {
          SepalLength: (), PetalWidth: (),
          PetalLength: (), SepalWidth: ()},
        ()),

    types: (
        {
          SepalLength: tf.float64, PetalWidth: tf.float64,
          PetalLength: tf.float64, SepalWidth: tf.float64},
        tf.int64)>

 

操作

現在 Dataset はデータに渡り固定された順序で一度だけ iterate します、そして一度に単一の要素を生成するだけです。訓練のために使用可能となる前に更なる処理を必要とします。幸い、tf.data.Dataset クラスは訓練のためのデータをより良い準備をするためのメソッドを提供します。入力関数の次の行はこれらのメソッドの幾つかを活用します :

# Shuffle, repeat, and batch the examples.
dataset = dataset.shuffle(1000).repeat().batch(batch_size)

shuffle メソッドは項目をシャッフルするために (それらが通過するとき) 固定長のバッファを使用します。Dataset のサンプル数よりも大きい buffer_size の設定はデータが完全にシャッフルされることを確かなものにします。アイリス・データセットは 150 サンプルを含むだけです。

repeat メソッドは Dataset をそれが最後に達したとき再スタートさせます。エポック数を制限するためには、count 引数を設定します。

batch メソッドはバッチを作成するために、多数のサンプルを集めてそれらをスタックします。これはそれらの shape に次元を追加します。新しい次元は最初の次元として追加されます。次のコードは (前からの) MNIST Dataset 上で batch メソッドを使用します。これは (28, 28) 画像のスタックを表わす 3D 配列を含む Dataset になります :

print(mnist_ds.batch(100))
<BatchDataset
  shapes: (?, 28, 28),
  types: tf.uint8>

最後のバッチがより少ない要素を持つでしょうから dataset は未知のバッチサイズを持つことに注意してください。train_input_fn では、バッチ化の後 Dataset は要素の 1D ベクトルを含みます、そこでは各スカラーは以前は :

print(dataset)
<TensorSliceDataset
    shapes: (
        {
          SepalLength: (?,), PetalWidth: (?,),
          PetalLength: (?,), SepalWidth: (?,)},
        (?,)),

    types: (
        {
          SepalLength: tf.float64, PetalWidth: tf.float64,
          PetalLength: tf.float64, SepalWidth: tf.float64},
        tf.int64)>

 

Return

総ての Estimator の train, evaluate, と predict メソッドは tensorflow テンソル を含む (features, label) ペアを返す入力関数を必要とします。train_input_fn は Dataset を想定されるフォーマットに変換するために次の行を使用します :

# Build the Iterator, and return the read end of the pipeline.
features_result, labels_result = dataset.make_one_shot_iterator().get_next()

結果は TensorFlow テンソル の構造です、Dataset の項目のレイアウトに適合します。これらのオブジェクトが何かそしてそれらとどのように作業するかへのイントロダクションのためには、Introduction を見てください。

print((features_result, labels_result))
({
    'SepalLength': ,
    'PetalWidth': ,
    'PetalLength': ,
    'SepalWidth': },
Tensor("IteratorGetNext_1:4", shape=(?,), dtype=int64))

 

CSV ファイルを読む

Dataset クラスのための最も一般的な現実世界のユースケースはディスク上のファイルからデータをストリームします。tf.data モジュールは様々なファイル・リーダーを含みます。Dataset を利用した csv ファイルからのアイリス・データセットの解析がどのようなものか見てみましょう。

iris_data.maybe_download 関数への次の呼び出しは必要であればデータをダウンロードし、結果としてのファイルのパス名を返します :

import iris_data
train_path, test_path = iris_data.maybe_download()

iris_data.csv_input_fn 関数は Dataset を使用して csv ファイルを解析する代わりの実装を含みます。

ローカル・ファイルから読む Estimator 互換の入力関数をどのように構築するかを見てみましょう。

 

Dataset を構築する

一度にファイルの一行を読むための TextLineDataset オブジェクトを構築することから始めます。それから、サンプルではなくヘッダを含む、ファイルの最初の行をスキップするために skip メソッドを呼び出します :

ds = tf.data.TextLineDataset(train_path).skip(1)

 

csv 行パーサーを構築する

結局のところは必要な (features, label) ペアを生成するためには dataset の各行を解析する必要があるでしょう。

単一行を解析するための関数を構築することから始めます。

次の iris_data.parse_line 関数は tf.decode_csv と幾つかの単純な python コードを使用してこのタスクを成し遂げます :

必要な (features, label) ペアを生成するためには dataset の各行を解析しなければなりません。次の _parse_line 関数は単一行をその特徴とラベルに解析するために tf.decode_csv を呼び出します。Estimator はその特徴が辞書として表わされることを要求しますので、その辞書を構築するために Python の組み込み辞書と zip 関数に依拠します。特徴名はその辞書のキーです。それから特徴辞書から label フィールドを取り除くために辞書の pop メソッドを呼び出します :

# Metadata describing the text columns
COLUMNS = ['SepalLength', 'SepalWidth',
           'PetalLength', 'PetalWidth',
           'label']
FIELD_DEFAULTS = [[0.0], [0.0], [0.0], [0.0], [0]]
def _parse_line(line):
    # Decode the line into its fields
    fields = tf.decode_csv(line, FIELD_DEFAULTS)

    # Pack the result into a dictionary
    features = dict(zip(COLUMNS,fields))

    # Separate the label from the features
    label = features.pop('label')

    return features, label

 

行を解析する

Dataset は (モデルにパイプされている) データを操作するために多くのメソッドを持ちます。最も頻繁に使用されるメソッドは map で、これは Dataset の各要素に変換を適用します。

map メソッドは map_func 引数を取ります、これは Dataset の各項目がどのように変換されるべきかを記述します。


map メソッドは Dataset の各項目を変換するために `map_func` を適用します。

行を解析するためにはそれらが csv ファイルからストリームされるとき、_parse_line 関数を map メソッドに渡します :

ds = ds.map(_parse_line)
print(ds)
<MapDataset
shapes: (
    {SepalLength: (), PetalWidth: (), ...},
    ()),
types: (
    {SepalLength: tf.float32, PetalWidth: tf.float32, ...},
    tf.int32)>

今では単純なスカラー文字列の代わりに、dataset は (features, label) ペアを含みます。

iris_data.csv_input_fn 関数の残りは、基本入力のセクションでカバーされた iris_data.train_input_fn と同一です。

 

試してみましょう

この関数は iris_data.train_input_fn の置き換えとして使用できます。それは次のように estimator に供給するために使用されます :

train_path, test_path = iris_data.maybe_download()

# All the inputs are numeric
feature_columns = [
    tf.feature_column.numeric_column(name)
    for name in iris_data.CSV_COLUMN_NAMES[:-1]]

# Build the estimator
est = tf.estimator.LinearClassifier(feature_columns,
                                    n_classes=3)
# Train the estimator
batch_size = 100
est.train(
    steps=1000,
    input_fn=lambda : iris_data.csv_input_fn(train_path, batch_size))

Estimator は input_fn が引数を取らないことを想定しています。この制限を回避するために、引数を捕捉するために lambda を使用して想定するインターフェイスを提供します。

 

以上



クラスキャット

最近の投稿

  • LangGraph 0.5 on Colab : Get started : human-in-the-loop 制御の追加
  • LangGraph 0.5 on Colab : Get started : Tavily Web 検索ツールの追加
  • LangGraph 0.5 on Colab : Get started : カスタム・ワークフローの構築
  • LangGraph 0.5 on Colab : Get started : クイックスタート
  • LangGraph on Colab : SQL エージェントの構築

タグ

AutoGen (13) ClassCat Press Release (20) ClassCat TF/ONNX Hub (11) DGL 0.5 (14) Eager Execution (7) Edward (17) FLUX.1 (16) Gemini (20) HuggingFace Transformers 4.5 (10) HuggingFace Transformers 4.6 (7) HuggingFace Transformers 4.29 (9) Keras 2 Examples (98) Keras 2 Guide (16) Keras 3 (10) Keras Release Note (17) Kubeflow 1.0 (10) LangChain (45) LangGraph (24) MediaPipe 0.8 (11) Model Context Protocol (16) NNI 1.5 (16) OpenAI Agents SDK (8) OpenAI Cookbook (13) OpenAI platform (10) OpenAI platform 1.x (10) OpenAI ヘルプ (8) TensorFlow 2.0 Advanced Tutorials (33) TensorFlow 2.0 Advanced Tutorials (Alpha) (15) TensorFlow 2.0 Advanced Tutorials (Beta) (16) TensorFlow 2.0 Guide (10) TensorFlow 2.0 Guide (Alpha) (16) TensorFlow 2.0 Guide (Beta) (9) TensorFlow 2.0 Release Note (12) TensorFlow 2.0 Tutorials (20) TensorFlow 2.0 Tutorials (Alpha) (14) TensorFlow 2.0 Tutorials (Beta) (12) TensorFlow 2.4 Guide (24) TensorFlow Deploy (8) TensorFlow Get Started (7) TensorFlow Graphics (7) TensorFlow Probability (9) TensorFlow Programmer's Guide (22) TensorFlow Release Note (18) TensorFlow Tutorials (33) TF-Agents 0.4 (11)
2018年3月
月 火 水 木 金 土 日
 1234
567891011
12131415161718
19202122232425
262728293031  
« 2月   4月 »
© 2025 ClasCat® AI Research | Powered by Minimalist Blog WordPress Theme