すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:TensorFlowについてのFAQ

最終更新日:Mar 07, 2025

このトピックでは、TensorFlowに関するFAQについて説明します。

内容

複数のPythonファイルを参照するにはどうすればよいですか?

Pythonファイルを使用して、トレーニングスクリプトを整理できます。 まず、データ前処理ロジックをPythonファイルに格納します。 次に、別のPythonファイルでモデルを定義します。 最後に、1つのPythonファイルを使用して、トレーニングプロセス全体を通してデータをトレーニングします。 たとえば、test1.pyファイルで関数を定義できます。 test2.pyファイルがtest1.pyファイルで提供されている関数を使用する必要があり、test2.pyファイルがプログラムエントリとして機能する場合は、test1.pyファイルとtest2.pyファイルをtar.gzパッケージに追加してパッケージをアップロードするだけです。 アップロードパラメーターを次の図に示します。 Multi-script reference

  • Pythonコードファイル: tar.gzパッケージ。

  • Primary Python File: プログラム入力ファイル。

OSSにデータをアップロードするにはどうすればよいですか?

OSSにデータをアップロードする前に、深層学習アルゴリズムのデータを保存するOSSバケットを作成する必要があります。 深層学習に使用するGPUクラスターと同じリージョンにOSSバケットを作成することを推奨します。 これにより、アルゴリズムによって生成されたトラフィックが無料のAlibaba Cloudのクラシックネットワークでデータを送信できます。 OSSバケットを作成した後、OSSコンソールでフォルダーの作成、データディレクトリの整理、データのアップロードを行うことができます。

OSSにデータをアップロードするには、API操作を呼び出すか、SDKを使用します。 詳細は、「簡易アップロード (Simple upload)」をご参照ください。 さらに、OSSには、データのアップロードとダウンロードを容易にするための多数のツールが用意されています。 詳細は、「OSSツール」をご参照ください。 ファイルのアップロードとダウンロードには、ossutilまたはosscmdを使用することを推奨します。

説明

これらのツールを使用してファイルをアップロードする場合、AccessKey IDとAccessKeyシークレットを設定する必要があります。 Alibaba Cloud管理コンソールにログインして、AccessKey IDとAccessKeyシークレットを作成または表示できます。

OSSからデータを読み取るにはどうすればよいですか?

Pythonコードを実行してOSSからデータを読み取ることはできません。 Python Open()os.path.exist() などの関数を呼び出してファイルやフォルダーを操作するコードはすべて実行できません。 たとえば、scipy.misc.imread() およびnumpy.load() を呼び出すコードは実行できません。

次の方法を使用して、PAIでデータを読み取ることができます。

  • tf.gfileモジュールの関数を使用して、画像またはテキストを読み取ります。 次のサンプル関数がサポートされています。

    tf.gfile.Copy(oldpath, newpath, overwrite=False) # Copies a file. 
    tf.gfile.DeleteRecursively(dirname) # Recursively deletes all files in a directory. 
    tf.gfile.Exists(filename) # Checks whether a file exists. 
    tf.gfile.FastGFile(name, mode='r') # Reads a file in non-blocking mode. 
    tf.gfile.GFile(name, mode='r') # Reads a file. 
    tf.gfile.Glob(filename) # Queries all files in a directory. You can filter these files by pattern. 
    tf.gfile.IsDirectory(dirname) # Checks whether an item is a directory.
    tf.gfile.ListDirectory(dirname) # Queries all files in a directory. 
    tf.gfile.MakeDirs(dirname) # Creates a folder in a directory. If no parent directories exist, a parent directory is automatically created. If the folder you want to create already exists and is writable, a success response is returned. 
    tf.gfile.MkDir(dirname) # Creates a folder in a directory. 
    tf.gfile.Remove(filename) # Deletes a file. 
    tf.gfile.Rename(oldname, newname, overwrite=False) # Renames a file. 
    tf.gfile.Stat(dirname) # Queries statistical data about a directory. 
    tf.gfile.Walk(top, inOrder=True) # Queries the file tree of a directory.
  • tf.gfile.Globtf.gfile.FastGFiletf.WhoFileReader() 、およびtf.train.shuffer_batch() 関数を使用してファイルをバッチ読み取りします。 ファイルをバッチ読み取りする前に、ファイルのリストを取得してバッチを作成する必要があります。

Machine learning Studioページで深層学習実験を作成する場合は、読み取りたいコードファイルやページの右側にあるディレクトリなどのパラメーターを指定する必要があります。 tf.flagsモジュールの関数は、-XXX形式のパラメータを渡すことができます。ここで、XXXは文字列を表します。

import tensorflow as tf
FLAGS = tf.flags.FLAGS
tf.flags.DEFINE_string('buckets', 'oss://{OSS Bucket}/', 'Folder of the training image file')
tf.flags.DEFINE_string('batch_size', '15', 'Size of the batch')
files = tf.gfile.Glob(os.path.join(FLAGS.buckets,'*.jpg')) # Queries the paths of all JPG files in buckets.

ファイル数に応じて, 次の方法でファイルを一括読み込みすることを推奨します。

  • tf.gfile.FastGfile() 関数を使用して、少数のファイルを一括読み取ります。

    for path in files:
        file_content = tf.gfile.FastGFile(path, 'rb').read() # Remember to specify rb when you call this function. Otherwise, errors may occur. 
        image = tf.image.decode_jpeg(file_content, channels=3) # In this example, JPG images are used.
  • tf.WhoFileReader() 関数を使用して、大量のファイルをバッチで読み取ります。

    reader = tf.WholeFileReader()  # Instantiates a reader. 
    fileQueue = tf.train.string_input_producer(files)  # Creates a queue for the reader to read. 
    file_name, file_content = reader.read(fileQueue)  # Uses the reader to read a file from the queue. 
    image_content = tf.image.decode_jpeg(file_content, channels=3)  # Decodes the file content into images. 
    label = XXX  # In this example, label processing operations are omitted. 
    batch = tf.train.shuffle_batch([label, image_content], batch_size=FLAGS.batch_size, num_threads=4,
                                   capacity=1000 + 3 * FLAGS.batch_size, min_after_dequeue=1000)
    sess = tf.Session()  # Creates a session. 
    tf.train.start_queue_runners(sess=sess)  # Starts the queue. If this command is not executed, the thread keeps blocked. 
    labels, images = sess.run(batch)  # Obtains the result.

    次に、コードについて説明します。

    • tf.train.string_input_producer: ファイルをキューに変換します。 キューを開始するには、tf.train.start_queue_runners構文を使用する必要があります。

    • tf.train.shuffle_batchには、次のパラメーターが含まれます。

      • batch_size: バッチタスクを実行した後に毎回返されるデータの量。

      • num_threads: 実行するスレッドの数。 値は通常4に設定されます。

      • capacity: ランダムにデータを抽出するデータの数。 例えば、データセットが10,000個のデータを有すると仮定する。 トレーニングする5,000のデータからランダムにデータを抽出する場合は、容量を5000に設定します。

      • min_after_dequeue: 維持するキューの最小長さ。 値はcapacityの値以下でなければなりません。

OSSにデータを書き込むにはどうすればよいですか?

次のいずれかの方法を使用してOSSにデータを書き込むことができます (生成されたファイルは /model/example.txtディレクトリに保存されます) 。

  • tf.gfile.FastGFile() 関数を使用してファイルを書き込みます。 次のコードは、サンプル関数を示しています。

    tf.gfile.FastGFile(FLAGS.checkpointDir + 'example.txt', 'wb').write('hello world')
  • tf.gfile.Copy() 関数を使用してファイルをコピーします。 次のコードは、サンプル関数を示しています。

    tf.gfile.Copy('./example.txt', FLAGS.checkpointDir + 'example.txt')

OOMエラーが発生するのはなぜですか?

メモリ使用量が最大30 GBに達したため、メモリ不足 (OOM) エラーが発生します。 gfile関数を使用してOSSからデータを読み取ることを推奨します。 詳細については、このトピックの「OSSからデータを読み取る方法」をご参照ください。

TensorFlowのどのようなユースケースが利用可能ですか?

2つのGPUが設定されている場合のmodel_average_iter_intervalの役割は何ですか?

model_average_iter_intervalパラメーターが設定されていない場合、GPUで並列確率勾配降下 (SGD) アルゴリズムが使用され、反復ごとに勾配が更新されます。 model_average_iter_intervalパラメーターが1より大きい場合、指定した反復間隔でデータを複数回トレーニングした後、モデル平均法を使用して2つの平均モデルパラメーターを計算します。 model_average_iter_intervalパラメーターは、トレーニング回数を指定します。

TensorFlowモデルをSavedModel形式でエクスポートしますか?

SavedModel形式

Machine Learning Platform for AI (PAI) のElastic Algorithm Service (EAS) に組み込まれた公式プロセッサを使用してTensorFlowモデルサービスをオンラインで展開する前に、モデルをSavedModel形式でエクスポートする必要があります。 SavedModel形式は、TensorFlowによって定義および推奨されています。 SavedModel形式では、次のディレクトリ構造が使用されます。

assets/
variables/
    variables.data-00000-of-00001
    variables.index
saved_model.pb|saved_model.pbtxt

ディレクトリ構造には、次のディレクトリが含まれます。

  • assetsディレクトリはオプションです。 予測サービスのサポートファイルを格納します。

  • variablesディレクトリには、tf.train.Saverメソッドを呼び出して保存した変数が格納されます。

  • saved_model.pbまたはsaved_model.pbtxtディレクトリには、MetaGraphDefとSignatureDefが格納されます。 MetaGraphDefはモデルトレーニングロジックを格納し、SignatureDefはモデルサービスの入力と出力を指定します。

SavedModel形式でモデルをエクスポート

TensorFlowを使用してSavedModel形式でモデルをエクスポートする方法の詳細については、「保存と復元」をご参照ください。 モデルが単純な場合は、次の方法を使用してSavedModel形式でエクスポートできます。

tf.saved_model.simple_save(
  session,
  "./savedmodel/",
  inputs={"image": x},   ## x specifies the input variables of the model.
  outputs={"scores": y}  ## y specifies the output variables of the model.
)

オンライン予測サービスを呼び出すときは、リクエストのモデルにsignature_nameパラメーターを設定する必要があります。 simple_save() メソッドを呼び出してモデルをエクスポートする場合、signature_nameパラメーターのデフォルト値はserving_defaultです。

モデルが複雑な場合は、次のサンプルコードに示すように、SavedModel形式で手動でエクスポートできます。

print('Exporting trained model to', export_path)
builder = tf.saved_model.builder.SavedModelBuilder(export_path)
tensor_info_x = tf.saved_model.utils.build_tensor_info(x)
tensor_info_y = tf.saved_model.utils.build_tensor_info(y)

prediction_signature = (
    tf.saved_model.signature_def_utils.build_signature_def(
        inputs={'images': tensor_info_x},
        outputs={'scores': tensor_info_y},
        method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME)
)

legacy_init_op = tf.group(tf.tables_initializer(), name='legacy_init_op')

builder.add_meta_graph_and_variables(
    sess, [tf.saved_model.tag_constants.SERVING],
    signature_def_map={
        'predict_images': prediction_signature,
    },
    legacy_init_op=legacy_init_op
)

builder.save()
print('Done exporting!')

次のパラメータの説明に注意してください。

  • export_pathパラメーターは、モデルのエクスポート先のパスを指定します。

  • prediction_signatureパラメーターは、モデルの入力と出力を指定するSignatureDefを示します。 詳細については、SignatureDefをご参照ください。 この例では、signature_nameパラメーターはpredict_imagesに設定されています。

  • builder.add_meta_graph_and_variablesメソッドは、モデルをエクスポートするためのパラメーターを指定します。

説明
  • 予測に必要なモデルをエクスポートする場合、エクスポートするモデルのタグとしてtf.saved_model.tag_constants.SERVINGを指定する必要があります。

  • TensorFlowモデルの詳細については、TensorFlow SavedModelをご参照ください。

KerasモデルをSavedModel形式に変換

Kerasのmodel.save() メソッドを呼び出して、KerasモデルをH5形式に変換できます。 ただし、Kerasモデルは、オンライン予測のためにSavedModel形式に変換する必要があります。 形式変換を実装するには、次のサンプルコードに示すように、load_model() メソッドを呼び出してH5モデルをロードし、SavedModel形式でエクスポートします。

import tensorflow as tf
with tf.device("/cpu:0"):
    model = tf.keras.models.load_model('./mnist.h5')
    tf.saved_model.simple_save(
      tf.keras.backend.get_session(),
      "./h5_savedmodel/",
      inputs={"image": model.input},
      outputs={"scores": model.output}
    )

チェックポイントモデルをSavedModel形式に変換

モデルのトレーニング中にtf.train.Saver() メソッドを呼び出すと、モデルはチェックポイント形式で保存されます。 オンライン予測のためにSavedModel形式に変換する必要があります。 次のサンプルコードに示すように、saver.restore() メソッドを呼び出してチェックポイントモデルをtf.Sessionとして読み込み、モデルをSavedModel形式でエクスポートできます。

import tensorflow as tf
# variable define ...
saver = tf.train.Saver()
with tf.Session() as sess:
  # Initialize v1 since the saver will not.
    saver.restore(sess, "./lr_model/model.ckpt")
    tensor_info_x = tf.saved_model.utils.build_tensor_info(x)
    tensor_info_y = tf.saved_model.utils.build_tensor_info(y)
    tf.saved_model.simple_save(
      sess,
      "./savedmodel/",
      inputs={"image": tensor_info_x},
      outputs={"scores": tensor_info_y}
    )