日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

TensorFlow常見問題

本文為您介紹TensorFlow的相關(guān)問題。

目錄

如何支持多Python文件引用?

您可以通過Python文件組織訓(xùn)練腳本。通常首先將數(shù)據(jù)預(yù)處理邏輯存放在某個(gè)Python文件中,然后將模型定義在另一個(gè)Python文件中,最后通過一個(gè)Python文件串聯(lián)整個(gè)訓(xùn)練過程。例如,在test1.py中定義函數(shù),如果test2.py文件需要使用test1.py中的函數(shù),且將test2.py作為程序入口文件,則只需要將test1.py和test2.py打包為.tar.gz包并上傳即可,如下圖所示。多腳本引用其中:

  • Python代碼文件:.tar.gz包。

  • Python主文件:入口程序文件。

如何上傳數(shù)據(jù)到OSS?

上傳數(shù)據(jù)的視頻請(qǐng)參見如何上傳數(shù)據(jù)

深度學(xué)習(xí)算法的數(shù)據(jù)存儲(chǔ)在OSS的Bucket中,因此需要先創(chuàng)建OSS Bucket。建議您將OSS Bucket創(chuàng)建在與深度學(xué)習(xí)GPU集群相同的地域,從而使用阿里云經(jīng)典網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)傳輸,進(jìn)而使算法運(yùn)行免收流量費(fèi)。創(chuàng)建OSS Bucket后,可以在OSS管理控制臺(tái)創(chuàng)建文件夾、組織數(shù)據(jù)目錄或上傳數(shù)據(jù)。

您可以通過API或SDK上傳數(shù)據(jù)至OSS,詳情請(qǐng)參見簡單上傳。同時(shí),OSS提供了大量工具(工具列表請(qǐng)參見OSS常用工具匯總。)幫助您更高效地完成任務(wù),建議使用ossutil或osscmd工具上傳下載文件。

說明

使用工具上傳文件時(shí),需要配置AccessKey ID和AccessKey Secret,您可以登錄阿里云管理控制臺(tái)創(chuàng)建或查看該信息。

如何讀取OSS數(shù)據(jù)?

Python不支持讀取OSS數(shù)據(jù),因此所有調(diào)用Python Open()os.path.exist()等文件和文件夾操作函數(shù)的代碼都無法執(zhí)行。例如Scipy.misc.imread()numpy.load()等。

通常采用以下兩種方式在PAI中讀取數(shù)據(jù):

  • 使用tf.gfile下的函數(shù),適用于簡單讀取一張圖片或一個(gè)文本等。成員函數(shù)如下。

    tf.gfile.Copy(oldpath, newpath, overwrite=False) # 拷貝文件。
    tf.gfile.DeleteRecursively(dirname) # 遞歸刪除目錄下所有文件。
    tf.gfile.Exists(filename) # 文件是否存在。
    tf.gfile.FastGFile(name, mode='r') # 無阻塞讀取文件。
    tf.gfile.GFile(name, mode='r') # 讀取文件。
    tf.gfile.Glob(filename) # 列出文件夾下所有文件, 支持Pattern。
    tf.gfile.IsDirectory(dirname) # 返回dirname是否為一個(gè)目錄
    tf.gfile.ListDirectory(dirname) # 列出dirname下所有文件。
    tf.gfile.MakeDirs(dirname) # 在dirname下創(chuàng)建一個(gè)文件夾。如果父目錄不存在, 則自動(dòng)創(chuàng)建父目錄。如果文件夾已經(jīng)存在, 且文件夾可寫, 則返回成功。
    tf.gfile.MkDir(dirname) # 在dirname處創(chuàng)建一個(gè)文件夾。
    tf.gfile.Remove(filename) # 刪除filename。
    tf.gfile.Rename(oldname, newname, overwrite=False) # 重命名。
    tf.gfile.Stat(dirname) # 返回目錄的統(tǒng)計(jì)數(shù)據(jù)。
    tf.gfile.Walk(top, inOrder=True) # 返回目錄的文件樹。
  • 使用tf.gfile.Globtf.gfile.FastGFiletf.WhoFileReader()tf.train.shuffer_batch(),適用于批量讀取文件(讀取文件之前需要獲取文件列表。如果批量讀取,還需要?jiǎng)?chuàng)建Batch)。

使用Designer搭建深度學(xué)習(xí)實(shí)驗(yàn)時(shí),通常需要在界面右側(cè)設(shè)置讀取目錄及代碼文件等參數(shù)。tf.flags支持通過-XXX(XXX表示字符串)的形式傳入該參數(shù)。

import tensorflow as tf
FLAGS = tf.flags.FLAGS
tf.flags.DEFINE_string('buckets', 'oss://{OSS Bucket}/', '訓(xùn)練圖片所在文件夾')
tf.flags.DEFINE_string('batch_size', '15', 'batch大小')
files = tf.gfile.Glob(os.path.join(FLAGS.buckets,'*.jpg')) # 列出buckets下所有JPG文件路徑。

批量讀取文件時(shí),對(duì)于不同規(guī)模的文件,建議分別使用如下方式:

  • 讀取小規(guī)模文件時(shí),建議使用tf.gfile.FastGfile()

    for path in files:
        file_content = tf.gfile.FastGFile(path, 'rb').read() # 一定記得使用rb讀取, 否則很多情況下都會(huì)報(bào)錯(cuò)。
        image = tf.image.decode_jpeg(file_content, channels=3) # 以JPG圖片為例。
  • 讀取大規(guī)模文件時(shí),建議使用tf.WhoFileReader()

    reader = tf.WholeFileReader()  # 實(shí)例化reader。
    fileQueue = tf.train.string_input_producer(files)  # 創(chuàng)建一個(gè)供reader讀取的隊(duì)列。
    file_name, file_content = reader.read(fileQueue)  # 使reader從隊(duì)列中讀取一個(gè)文件。
    image_content = tf.image.decode_jpeg(file_content, channels=3)  # 將讀取結(jié)果解碼為圖片。
    label = XXX  # 省略處理label的過程。
    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()  # 創(chuàng)建Session。
    tf.train.start_queue_runners(sess=sess)  # 啟動(dòng)隊(duì)列。如果未執(zhí)行該命令,則線程會(huì)一直阻塞。
    labels, images = sess.run(batch)  # 獲取結(jié)果。

    核心代碼解釋如下:

    • tf.train.string_input_producer:將files轉(zhuǎn)換為隊(duì)列,且需要使用tf.train.start_queue_runners啟動(dòng)隊(duì)列。

    • tf.train.shuffle_batch參數(shù)如下:

      • batch_size:批處理大小,即每次運(yùn)行Batch返回的數(shù)據(jù)數(shù)量。

      • num_threads:運(yùn)行線程數(shù),一般設(shè)置為4。

      • capacity:隨機(jī)取文件范圍。例如,數(shù)據(jù)集有10000個(gè)數(shù)據(jù),如果需要從5000個(gè)數(shù)據(jù)中隨機(jī)抽取,則將capacity配置為5000。

      • min_after_dequeue:維持隊(duì)列的最小長度,不能大于capacity

如何為OSS寫入數(shù)據(jù)?

您可以通過以下任意一種方式將數(shù)據(jù)寫入OSS中,生成的文件存儲(chǔ)在輸出目錄/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')

為什么運(yùn)行過程中出現(xiàn)OOM?

使用的內(nèi)存達(dá)到上限30 GB,建議通過gfile讀取OSS數(shù)據(jù),詳情請(qǐng)參見如何讀取OSS數(shù)據(jù)?

TensorFlow有哪些案例?

如何查看TensorFlow相關(guān)日志?

查看TensorFlow相關(guān)日志請(qǐng)參見查看訓(xùn)練中的日志

配置兩個(gè)GPU時(shí),model_average_iter_interval有什么作用?

如果未配置model_average_iter_interval參數(shù),則GPU會(huì)運(yùn)行標(biāo)準(zhǔn)的Parallel-SGD,每個(gè)迭代都會(huì)交換梯度更新。如果model_average_iter_interval大于1,則使用Model Average方法,訓(xùn)練迭代間隔若干輪(model_average_iter_interval表示數(shù)值輪數(shù))計(jì)算兩個(gè)平均模型參數(shù)。

TensorFlow模型如何導(dǎo)出為SavedModel?

SavedModel格式

使用EAS預(yù)置官方Processor將TensorFlow模型部署為在線服務(wù),必須先將模型導(dǎo)出為官方定義的SavedModel格式(TensorFlow官方推薦的導(dǎo)出模型格式)。SavedModel模型格式的目錄結(jié)構(gòu)如下。

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

其中:

  • assets表示一個(gè)可選目錄,用于存儲(chǔ)預(yù)測時(shí)的輔助文檔信息。

  • variables存儲(chǔ)tf.train.Saver保存的變量信息。

  • saved_model.pbsaved_model.pbtxt存儲(chǔ)MetaGraphDef(存儲(chǔ)訓(xùn)練預(yù)測模型的程序邏輯)和SignatureDef(用于標(biāo)記預(yù)測時(shí)的輸入和輸出)。

導(dǎo)出SavedModel

使用TensorFlow導(dǎo)出SavedModel格式的模型請(qǐng)參見Saving and Restoring。如果模型比較簡單,則可以使用如下方式快速導(dǎo)出SavedModel。

tf.saved_model.simple_save(
  session,
  "./savedmodel/",
  inputs={"image": x},   ## x表示模型的輸入變量。
  outputs={"scores": y}  ## y表示模型的輸出。
)

請(qǐng)求在線預(yù)測服務(wù)時(shí),請(qǐng)求中需要指定模型signature_name,使用simple_save()方法導(dǎo)出的模型中,signature_name默認(rèn)為serving_default

如果模型比較復(fù)雜,則可以使用手工方式導(dǎo)出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表示導(dǎo)出模型的路徑。

  • prediction_signature表示模型為輸入和輸出構(gòu)建的SignatureDef,詳情請(qǐng)參見SignatureDef。示例中的signature_name為predict_images

  • builder.add_meta_graph_and_variables方法表示導(dǎo)出模型的參數(shù)。

說明
  • 導(dǎo)出預(yù)測所需的模型時(shí),必須指定導(dǎo)出模型的Tag為tf.saved_model.tag_constants.SERVING。

  • 有關(guān)TensorFlow模型的更多信息,請(qǐng)參見TensorFlow SavedModel

Keras模型轉(zhuǎn)換為SavedModel

使用Keras的model.save()方法會(huì)將Keras模型導(dǎo)出為H5格式,需要將其轉(zhuǎn)換為SavedModel才能進(jìn)行在線預(yù)測。您可以先調(diào)用load_model()方法加載H5模型,再將其導(dǎo)出為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}
    )

Checkpoint轉(zhuǎn)換為Savedmodel

訓(xùn)練過程中使用tf.train.Saver()方法保存的模型格式為checkpoint,需要將其轉(zhuǎn)換為SavedModel才能進(jìn)行在線預(yù)測。您可以先調(diào)用saver.restore()方法將Checkpoint加載為tf.Session,再將其導(dǎo)出為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}
    )