Rumah pembangunan bahagian belakang Tutorial Python 浅谈Tensorflow模型的保存与恢复加载

浅谈Tensorflow模型的保存与恢复加载

Apr 26, 2018 pm 04:40 PM
tensorflow simpan pulih

本篇文章主要介绍了浅谈Tensorflow模型的保存与恢复加载,现在分享给大家,也给大家做个参考。一起过来看看吧

近期做了一些反垃圾的工作,除了使用常用的规则匹配过滤等手段,也采用了一些机器学习方法进行分类预测。我们使用TensorFlow进行模型的训练,训练好的模型需要保存,预测阶段我们需要将模型进行加载还原使用,这就涉及TensorFlow模型的保存与恢复加载。

总结一下Tensorflow常用的模型保存方式。

保存checkpoint模型文件(.ckpt)

首先,TensorFlow提供了一个非常方便的api,tf.train.Saver()来保存和还原一个机器学习模型。

模型保存

使用tf.train.Saver()来保存模型文件非常方便,下面是一个简单的例子:


import tensorflow as tf
import os

def save_model_ckpt(ckpt_file_path):
  x = tf.placeholder(tf.int32, name='x')
  y = tf.placeholder(tf.int32, name='y')
  b = tf.Variable(1, name='b')
  xy = tf.multiply(x, y)
  op = tf.add(xy, b, name='op_to_store')

  sess = tf.Session()
  sess.run(tf.global_variables_initializer())

  path = os.path.dirname(os.path.abspath(ckpt_file_path))
  if os.path.isdir(path) is False:
    os.makedirs(path)

  tf.train.Saver().save(sess, ckpt_file_path)
  
  # test
  feed_dict = {x: 2, y: 3}
  print(sess.run(op, feed_dict))
Salin selepas log masuk


程序生成并保存四个文件(在版本0.11之前只会生成三个文件:checkpoint, model.ckpt, model.ckpt.meta)

  1. checkpoint 文本文件,记录了模型文件的路径信息列表

  2. model.ckpt.data-00000-of-00001 网络权重信息

  3. model.ckpt.index .data和.index这两个文件是二进制文件,保存了模型中的变量参数(权重)信息

  4. model.ckpt.meta 二进制文件,保存了模型的计算图结构信息(模型的网络结构)protobuf

以上是tf.train.Saver().save()的基本用法,save()方法还有很多可配置的参数:


tf.train.Saver().save(sess, ckpt_file_path, global_step=1000)
Salin selepas log masuk


加上global_step参数代表在每1000次迭代后保存模型,会在模型文件后加上"-1000",model.ckpt-1000.index, model.ckpt-1000.meta, model.ckpt.data-1000-00000-of-00001

每1000次迭代保存一次模型,但是模型的结构信息文件不会变,就只用1000次迭代时保存一下,不用相应的每1000次保存一次,所以当我们不需要保存meta文件时,可以加上write_meta_graph=False参数,如下:


复制代码 代码如下:

tf.train.Saver().save(sess, ckpt_file_path, global_step=1000, write_meta_graph=False)
Salin selepas log masuk

如果想每两小时保存一次模型,并且只保存最新的4个模型,可以加上使用max_to_keep(默认值为5,如果想每训练一个epoch就保存一次,可以将其设置为None或0,但是没啥用不推荐), keep_checkpoint_every_n_hours参数,如下:


复制代码 代码如下:

tf.train.Saver().save(sess, ckpt_file_path, max_to_keep=4, keep_checkpoint_every_n_hours=2)
Salin selepas log masuk


同时在tf.train.Saver()类中,如果我们不指定任何信息,则会保存所有的参数信息,我们也可以指定部分想要保存的内容,例如只保存x, y参数(可传入参数list或dict):


tf.train.Saver([x, y]).save(sess, ckpt_file_path)
Salin selepas log masuk


ps. 在模型训练过程中需要在保存后拿到的变量或参数名属性name不能丢,不然模型还原后不能通过get_tensor_by_name()获取。

模型加载还原

针对上面的模型保存例子,还原模型的过程如下:


import tensorflow as tf

def restore_model_ckpt(ckpt_file_path):
  sess = tf.Session()
  saver = tf.train.import_meta_graph('./ckpt/model.ckpt.meta') # 加载模型结构
  saver.restore(sess, tf.train.latest_checkpoint('./ckpt')) # 只需要指定目录就可以恢复所有变量信息

  # 直接获取保存的变量
  print(sess.run('b:0'))

  # 获取placeholder变量
  input_x = sess.graph.get_tensor_by_name('x:0')
  input_y = sess.graph.get_tensor_by_name('y:0')
  # 获取需要进行计算的operator
  op = sess.graph.get_tensor_by_name('op_to_store:0')

  # 加入新的操作
  add_on_op = tf.multiply(op, 2)

  ret = sess.run(add_on_op, {input_x: 5, input_y: 5})
  print(ret)
Salin selepas log masuk


首先还原模型结构,然后还原变量(参数)信息,最后我们就可以获得已训练的模型中的各种信息了(保存的变量、placeholder变量、operator等),同时可以对获取的变量添加各种新的操作(见以上代码注释)。
并且,我们也可以加载部分模型,在此基础上加入其它操作,具体可以参考官方文档和demo。

针对ckpt模型文件的保存与还原,stackoverflow上有一个回答解释比较清晰,可以参考。

同时cv-tricks.com上面的TensorFlow模型保存与恢复的教程也非常好,可以参考。

《tensorflow 1.0 学习:模型的保存与恢复(Saver)》有一些Saver使用技巧。

保存单个模型文件(.pb)

我自己运行过Tensorflow的inception-v3的demo,发现运行结束后会生成一个.pb的模型文件,这个文件是作为后续预测或迁移学习使用的,就一个文件,非常炫酷,也十分方便。

这个过程的主要思路是graph_def文件中没有包含网络中的Variable值(通常情况存储了权重),但是却包含了constant值,所以如果我们能把Variable转换为constant(使用graph_util.convert_variables_to_constants()函数),即可达到使用一个文件同时存储网络架构与权重的目标。

ps:这里.pb是模型文件的后缀名,当然我们也可以用其它的后缀(使用.pb与google保持一致 ╮(╯▽╰)╭)

模型保存

同样根据上面的例子,一个简单的demo:


import tensorflow as tf
import os
from tensorflow.python.framework import graph_util

def save_mode_pb(pb_file_path):
  x = tf.placeholder(tf.int32, name='x')
  y = tf.placeholder(tf.int32, name='y')
  b = tf.Variable(1, name='b')
  xy = tf.multiply(x, y)
  # 这里的输出需要加上name属性
  op = tf.add(xy, b, name='op_to_store')

  sess = tf.Session()
  sess.run(tf.global_variables_initializer())

  path = os.path.dirname(os.path.abspath(pb_file_path))
  if os.path.isdir(path) is False:
    os.makedirs(path)

  # convert_variables_to_constants 需要指定output_node_names,list(),可以多个
  constant_graph = graph_util.convert_variables_to_constants(sess, sess.graph_def, ['op_to_store'])
  with tf.gfile.FastGFile(pb_file_path, mode='wb') as f:
    f.write(constant_graph.SerializeToString())

  # test
  feed_dict = {x: 2, y: 3}
  print(sess.run(op, feed_dict))
Salin selepas log masuk


程序生成并保存一个文件

model.pb 二进制文件,同时保存了模型网络结构和参数(权重)信息

模型加载还原

针对上面的模型保存例子,还原模型的过程如下:


import tensorflow as tf
from tensorflow.python.platform import gfile

def restore_mode_pb(pb_file_path):
  sess = tf.Session()
  with gfile.FastGFile(pb_file_path, 'rb') as f:
    graph_def = tf.GraphDef()
    graph_def.ParseFromString(f.read())
    sess.graph.as_default()
    tf.import_graph_def(graph_def, name='')

  print(sess.run('b:0'))

  input_x = sess.graph.get_tensor_by_name('x:0')
  input_y = sess.graph.get_tensor_by_name('y:0')

  op = sess.graph.get_tensor_by_name('op_to_store:0')

  ret = sess.run(op, {input_x: 5, input_y: 5})
  print(ret)
Salin selepas log masuk


模型的还原过程与checkpoint差不多一样。

《将TensorFlow的网络导出为单个文件》上介绍了TensorFlow保存单个模型文件的方式,大同小异,可以看看。

思考

模型的保存与加载只是TensorFlow中最基础的部分之一,虽然简单但是也必不可少,在实际运用中还需要注意模型何时保存,哪些变量需要保存,如何设计加载实现迁移学习等等问题。

同时TensorFlow的函数和类都在一直变化更新,以后也有可能出现更丰富的模型保存和还原的方法。

选择保存为checkpoint或单个pb文件视业务情况而定,没有特别大的差别。checkpoint保存感觉会更加灵活一些,pb文件更适合线上部署吧(个人看法)。

以上完整代码:github https://github.com/liuyan731/tf_demo

相关推荐:

TensorFlow模型保存和提取方法示例


Atas ialah kandungan terperinci 浅谈Tensorflow模型的保存与恢复加载. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1664
14
Tutorial PHP
1267
29
Tutorial C#
1239
24
Bagaimana untuk memulihkan fail WeChat yang telah tamat tempoh Bolehkah fail WeChat yang telah tamat tempoh dipulihkan? Bagaimana untuk memulihkan fail WeChat yang telah tamat tempoh Bolehkah fail WeChat yang telah tamat tempoh dipulihkan? Feb 22, 2024 pm 02:46 PM

Buka WeChat, pilih Tetapan dalam Saya, pilih Umum dan kemudian pilih Ruang Storan, pilih Pengurusan dalam Ruang Storan, pilih perbualan di mana anda ingin memulihkan fail dan pilih ikon tanda seru. Tutorial Model Berkenaan: iPhone13 Sistem: iOS15.3 Versi: WeChat 8.0.24 Analisis 1 Mula-mula buka WeChat dan klik pilihan Tetapan pada halaman Saya. 2 Kemudian cari dan klik Pilihan Umum pada halaman tetapan. 3Kemudian klik Ruang Storan pada halaman umum. 4 Seterusnya, klik Urus pada halaman ruang storan. 5Akhir sekali, pilih perbualan di mana anda ingin memulihkan fail dan klik ikon tanda seru di sebelah kanan. Tambahan: Fail WeChat biasanya tamat tempoh dalam beberapa hari Jika fail yang diterima oleh WeChat belum diklik, sistem WeChat akan mengosongkannya selepas 72 jam Jika fail WeChat telah dilihat.

Bagaimana untuk memulihkan sejarah penyemakan imbas dalam mod inkognito Bagaimana untuk memulihkan sejarah penyemakan imbas dalam mod inkognito Feb 19, 2024 pm 04:22 PM

Penyemakan imbas peribadi ialah cara yang sangat mudah untuk menyemak imbas dan melindungi privasi anda semasa melayari Internet pada komputer atau peranti mudah alih anda. Mod penyemakan imbas peribadi biasanya menghalang penyemak imbas daripada merekodkan sejarah lawatan anda, menyimpan kuki dan fail cache serta menghalang tapak web yang anda semak imbas daripada meninggalkan sebarang kesan dalam penyemak imbas. Walau bagaimanapun, untuk beberapa kes khas, kami mungkin perlu memulihkan sejarah penyemakan imbas Penyemakan Imbas Inkognito. Pertama sekali, kita perlu menjelaskannya: tujuan mod penyemakan imbas peribadi adalah untuk melindungi privasi dan menghalang orang lain daripada mendapatkan sejarah dalam talian pengguna daripada penyemak imbas. Oleh itu, penyemakan imbas inkognito

Bagaimana untuk memulihkan percikan sembang di TikTok Bagaimana untuk memulihkan percikan sembang di TikTok Mar 16, 2024 pm 01:25 PM

Di Douyin, platform video pendek yang penuh dengan kreativiti dan kecergasan, kami bukan sahaja dapat menikmati pelbagai kandungan yang menarik, tetapi juga mempunyai komunikasi yang mendalam dengan rakan-rakan yang berfikiran sama. Antaranya, percikan sembang adalah penunjuk penting keamatan interaksi antara kedua-dua pihak, dan mereka sering secara tidak sengaja mencetuskan ikatan emosi antara kita dan rakan-rakan kita. Walau bagaimanapun, kadangkala disebabkan beberapa sebab, percikan sembang mungkin terputus, jadi apakah yang perlu kami lakukan jika kami ingin memulihkan percikan sembang ini akan membawakan anda pengenalan terperinci tentang strategi kandungan, dengan harapan dapat membantu semua orang. Bagaimana untuk memulihkan cetusan sembang Douyin? 1. Buka halaman mesej Douyin dan pilih rakan untuk bersembang. 2. Hantar mesej dan sembang antara satu sama lain. 3. Jika anda menghantar mesej secara berterusan selama 3 hari, anda boleh mendapatkan logo percikan. Selama 3 hari, hantar gambar atau video antara satu sama lain

Bagaimana untuk menyimpan gambar tanpa tera air di Xiaohongshu Bagaimana untuk menyimpan gambar tanpa tera air di Xiaohongshu Bagaimana untuk menyimpan gambar tanpa tera air di Xiaohongshu Bagaimana untuk menyimpan gambar tanpa tera air di Xiaohongshu Mar 22, 2024 pm 03:40 PM

Xiaohongshu mempunyai kandungan yang kaya yang semua orang boleh lihat secara bebas di sini, supaya anda boleh menggunakan perisian ini untuk menghilangkan kebosanan setiap hari dan membantu diri sendiri Dalam proses menggunakan perisian ini, anda kadang-kadang akan melihat pelbagai perkara yang indah. tetapi gambar yang disimpan mempunyai tera air, yang sangat berpengaruh Semua orang ingin tahu cara menyimpan gambar tanpa tanda air di sini saya akan memberikan anda kaedah untuk mereka yang memerlukannya. 1. Klik "..." di penjuru kanan sebelah atas gambar untuk menyalin pautan 2. Buka applet WeChat 3. Cari perpustakaan keledek dalam applet WeChat 4. Masukkan perpustakaan keledek dan sahkan untuk mendapatkan pautan 5. Dapatkan gambar dan simpan ke album telefon bimbit

Bagaimana untuk memulihkan album foto Xiaomi Cloud kepada setempat Bagaimana untuk memulihkan album foto Xiaomi Cloud kepada setempat Feb 24, 2024 pm 03:28 PM

Bagaimana untuk memulihkan Album Foto Awan Xiaomi ke setempat? APP Album Foto Awan Xiaomi boleh dipulihkan ke setempat, tetapi kebanyakan rakan tidak tahu cara memulihkan Album Foto Awan Xiaomi ke setempat. Tutorial grafik kaedah tempatan, pengguna yang berminat datang dan lihat! Bagaimana untuk memulihkan album foto awan Xiaomi ke tempatan 1. Mula-mula buka fungsi tetapan dalam telefon Xiaomi dan pilih [Avatar Peribadi] pada antara muka utama 2. Kemudian masukkan antara muka akaun Xiaomi dan klik fungsi [Cloud Service]; lompat ke Xiaomi Untuk fungsi perkhidmatan awan, pilih [Cloud Backup];

Tutorial untuk memulihkan avatar lalai win11 Tutorial untuk memulihkan avatar lalai win11 Jan 02, 2024 pm 12:43 PM

Jika kami menukar avatar akaun sistem kami tetapi tidak mahu lagi, kami tidak dapat mencari cara menukar avatar lalai dalam win11 Malah, kami hanya perlu mencari folder avatar lalai untuk memulihkannya. Pulihkan avatar lalai dalam win11 1. Mula-mula klik pada "Logo Windows" pada bar tugas bawah 2. Kemudian cari dan buka "Tetapan" 3. Kemudian masukkan "Akaun" pada lajur kiri 4. Kemudian klik pada "Maklumat Akaun" pada sebelah kanan 5. Selepas membuka, klik "Semak Imbas Fail" dalam foto yang dipilih 6. Akhir sekali, masukkan laluan "C:\ProgramData\Microsoft\UserAccountPictures" untuk mencari gambar avatar lalai sistem.

Bagaimana untuk memulihkan kertas dinding lalai dalam win10 Bagaimana untuk memulihkan kertas dinding lalai dalam win10 Feb 10, 2024 pm 10:51 PM

Kemas Kini Windows 10 Mei 2019 menampilkan latar belakang desktop lalai baharu yang lebih terang. Ia kelihatan hebat - dengan tema cahaya baharu. Jika anda menggunakan tema gelap Windows 10, anda mungkin mahukan latar belakang yang lebih gelap. Anehnya, latar belakang desktop Windows 10 asal telah dialih keluar daripada versi terkini Windows 10. Anda perlu memuat turunnya daripada web atau menyalin failnya daripada PC Windows 10 lama. Walaupun kami tidak dapat mencari imej kertas dinding ini di tapak web rasmi Microsoft, anda boleh memuat turunnya daripada sumber lain. Kami menemui salinan kertas dinding desktop Windows 10 asal dalam resolusi 4K pada Imgur. Selain itu, terdapat saiz lain dan lebih banyak dinding lalai

Bagaimana untuk memulihkan sejarah penyemakan imbas yang telah dikosongkan Bagaimana untuk memulihkan sejarah penyemakan imbas yang telah dikosongkan Feb 18, 2024 pm 10:05 PM

Cara memulihkan sejarah halaman web selepas ia dikosongkan Tarikh: 10 Jun 2022 Pengenalan: Apabila kita menggunakan komputer atau penyemak imbas telefon mudah alih setiap hari, kita sering menggunakan sejarah penyemak imbas untuk mencari halaman web yang pernah kita lawati sebelum ini. Walau bagaimanapun, kadangkala kami mungkin secara tidak sengaja mengosongkan sejarah penyemak imbas kami, menyebabkan kami tidak dapat mendapatkan semula halaman web tertentu. Dalam artikel ini, saya akan memberitahu anda beberapa cara untuk memulihkan sejarah web yang telah dibersihkan. Kaedah 1: Gunakan fungsi pemulihan penyemak imbas Kebanyakan penyemak imbas biasa menyediakan fungsi memulihkan sejarah, seperti Google

See all articles