TensorFlow, modeli kaydettikten sonra neden 3 dosya var?


113

Belgeleri okuduktan sonra bir model kaydettim TensorFlow, işte demo kodum:

# Create some variables.
v1 = tf.Variable(..., name="v1")
v2 = tf.Variable(..., name="v2")
...
# Add an op to initialize the variables.
init_op = tf.global_variables_initializer()

# Add ops to save and restore all the variables.
saver = tf.train.Saver()

# Later, launch the model, initialize the variables, do some work, save the
# variables to disk.
with tf.Session() as sess:
  sess.run(init_op)
  # Do some work with the model.
  ..
  # Save the variables to disk.
  save_path = saver.save(sess, "/tmp/model.ckpt")
  print("Model saved in file: %s" % save_path)

ama ondan sonra 3 dosya buldum

model.ckpt.data-00000-of-00001
model.ckpt.index
model.ckpt.meta

Ve model.ckptböyle bir dosya olmadığı için modeli dosyayı geri yükleyerek geri yükleyemiyorum . İşte kodum

with tf.Session() as sess:
  # Restore variables from disk.
  saver.restore(sess, "/tmp/model.ckpt")

Peki neden 3 dosya var?


2
Bunu nasıl çözeceğinizi buldunuz mu? Modeli yeniden nasıl yükleyebilirim (Keras kullanarak)?
rajkiran

Yanıtlar:


116

Bunu dene:

with tf.Session() as sess:
    saver = tf.train.import_meta_graph('/tmp/model.ckpt.meta')
    saver.restore(sess, "/tmp/model.ckpt")

TensorFlow kaydetme yöntemi, grafik yapısını değişken değerlerden ayrı olarak sakladığı için üç tür dosya kaydeder . .metaEğer (aksi takdirde kaydedilmiş kontrol noktası değerleri karşılık Ne değişkenler bilmiyor) kontrol noktasını geri yüklemeden önce aktarmanız gerekir, yani dosyanın kaydedilmiş grafik yapısını açıklamaktadır.

Alternatif olarak, bunu yapabilirsiniz:

# Recreate the EXACT SAME variables
v1 = tf.Variable(..., name="v1")
v2 = tf.Variable(..., name="v2")

...

# Now load the checkpoint variable values
with tf.Session() as sess:
    saver = tf.train.Saver()
    saver.restore(sess, "/tmp/model.ckpt")

Adlandırılmış dosya olmamasına rağmen model.ckpt, kaydedilen kontrol noktasına, onu geri yüklerken yine de bu adla başvurursunuz. Gönderen saver.pykaynak kodu :

Kullanıcıların herhangi bir fiziksel yol adı yerine sadece kullanıcı tarafından belirlenen önekle etkileşime girmesi gerekir.


1
yani .index ve .data kullanılmıyor mu? Bu 2 dosya ne zaman kullanılıyor?
ajfbiw.s

26
@ ajfbiw.s .meta grafik yapısını saklar, .data her değişkenin değerlerini grafikte saklar, .index kontrol noktasını tanımlar. Yani yukarıdaki örnekte: import_meta_graph .meta'yı ve saver.restore .data ve .index'i kullanıyor
TK Bartel

Ah anlıyorum. Teşekkürler.
ajfbiw.s

1
Modeli yüklemek için kullandığınızdan farklı bir TensorFlow sürümüyle kaydetme şansınız var mı? ( github.com/tensorflow/tensorflow/issues/5639 )
TK Bartel

5
Bunun 00000ve 00001sayıların ne anlama geldiğini bilen var mı ? içinde variables.data-?????-of-?????dosyanın
Ivan Talalaev

55
  • meta dosya : kaydedilen grafik yapısını açıklar, GraphDef, SaverDef ve benzerlerini içerir; sonra uygula tf.train.import_meta_graph('/tmp/model.ckpt.meta'), geri yüklenir Saverve Graph.

  • indeks dosyası : bir string-string değişmez tablodur (tensorflow :: table :: Table). Her anahtar bir tensörün adıdır ve değeri serileştirilmiş bir BundleEntryProto'dur. Her BundleEntryProto, bir tensörün meta verilerini açıklar: "veri" dosyalarından hangisi bir tensörün içeriğini, bu dosyaya ofset, sağlama toplamı, bazı yardımcı veriler vb.

  • veri dosyası : TensorBundle koleksiyonudur, tüm değişkenlerin değerlerini kaydedin.


Görüntü sınıflandırması için sahip olduğum pb dosyasını aldım. Gerçek zamanlı video sınıflandırması için kullanabilir miyim?

Lütfen bana bildirir misiniz, Keras 2'yi kullanarak, 3 dosya olarak kaydedilmişse modeli nasıl yüklerim?
rajkiran

5

Word2Vec tensorflow öğreticisinden eğitimli kelime yerleştirmelerini geri yüklüyorum .

Birden fazla kontrol noktası oluşturduysanız:

ör. oluşturulan dosyalar şuna benzer

model.ckpt-55695.data-00000-of-00001

model.ckpt-55695.index

model.ckpt-55695.meta

bunu dene

def restore_session(self, session):
   saver = tf.train.import_meta_graph('./tmp/model.ckpt-55695.meta')
   saver.restore(session, './tmp/model.ckpt-55695')

restore_session () çağrılırken:

def test_word2vec():
   opts = Options()    
   with tf.Graph().as_default(), tf.Session() as session:
       with tf.device("/cpu:0"):            
           model = Word2Vec(opts, session)
           model.restore_session(session)
           model.get_embedding("assistance")

"Model.ckpt-55695.data-00000-of-00001" içindeki "00000-of-00001" ile ne anlama geliyor?
hafiz031

0

Örneğin, okulu bırakma ile bir CNN eğittiyseniz, bunu yapabilirsiniz:

def predict(image, model_name):
    """
    image -> single image, (width, height, channels)
    model_name -> model file that was saved without any extensions
    """
    with tf.Session() as sess:
        saver = tf.train.import_meta_graph('./' + model_name + '.meta')
        saver.restore(sess, './' + model_name)
        # Substitute 'logits' with your model
        prediction = tf.argmax(logits, 1)
        # 'x' is what you defined it to be. In my case it is a batch of RGB images, that's why I add the extra dimension
        return prediction.eval(feed_dict={x: image[np.newaxis,:,:,:], keep_prob_dnn: 1.0})
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.