Kısa cevap:
- Sen mon_sess.run geçmek optimizer küresel adımı geçmesi gerekiyor. Bu, hem kayıtlı kontrol noktalarını kaydetmek hem de kaydetmek için mümkün kılar.
- Tek bir MonitoredTrainingSession aracılığıyla bir eğitim + çapraz doğrulama oturumu eşzamanlı olarak çalıştırmak mümkündür. İlk olarak, aynı grafiğin ayrı akışları aracılığıyla eğitim partilerinden ve çapraz doğrulama gruplarından geçmeniz gerekir (bunun nasıl yapılacağı hakkında bilgi için this guide'a bakmanızı öneririm). İkincisi, - mon_sess.run() - eğitim akışı için bir optimizatör ve çapraz doğrulama akışının kaybı (/ izlemek istediğiniz parametrenin) için bir parametreyi geçirmeniz gerekir. Bir test seansını antrenmandan ayrı olarak çalıştırmak istiyorsanız, sadece grafik üzerinden test setini çalıştırın ve sadece test_loss (/ izlemek istediğiniz diğer parametreler) grafiğini kullanarak çalıştırın. Bunun nasıl yapıldığı hakkında daha fazla bilgi için aşağıya bakın.
Uzun cevap: Kendimi tf.train.MonitoredSession ile neler yapılabileceğini daha iyi görebilmek olsun
Ben tf.train.MonitoredTrainingSession basitçe özel bir versiyonunu yaratıyor (benim cevap güncelleyecektir tf.train.MonitoredSession, source code'da görüldüğü gibi).
Aşağıda, kontrol noktalarını her 5 saniyede bir "./ckpt_dir" konumuna nasıl kaydedebileceğinizi gösteren bir örnek kod verilmiştir.Ne zaman kesintiye, onun son kaydedilen denetim noktasına yeniden başlar:
- tf.train.MonitoredTrainingSession bir tf.train.Scaffold oluşturur: Bu aslında üç nedeni ulaşmak için MonitoredTrainingSession neler oluyor
def train(inputs, labels_onehot, global_step):
out = tf.contrib.layers.fully_connected(
inputs,
num_outputs=10,
activation_fn=tf.nn.sigmoid)
loss = tf.reduce_mean(
tf.reduce_sum(
tf.nn.sigmoid_cross_entropy_with_logits(
logits=out,
labels=labels_onehot), axis=1))
train_op = opt.minimize(loss, global_step=global_step)
return train_op
with tf.Graph().as_default():
global_step = tf.train.get_or_create_global_step()
inputs = ...
labels_onehot = ...
train_op = train(inputs, labels_onehot, global_step)
with tf.train.MonitoredTrainingSession(
checkpoint_dir='./ckpt_dir',
save_checkpoint_secs=5,
hooks=[ ... ] # Choose your hooks
) as mon_sess:
while not mon_sess.should_stop():
mon_sess.run(train_op)
webde bir örümcek gibi çalışan nesne; modeli eğitmek, kaydetmek ve yüklemek için ihtiyacınız olan parçaları toplar.
- tf.train.ChiefSessionCreator nesnesini oluşturur. Bu konudaki bilgim sınırlıdır, fakat benim anlayışımdan, tf algoritmanızın birden fazla sunucuya yayıldığı zaman kullanılır. Benim aldığım dosya, bilgisayarın ana bilgisayar olduğunu söyleyen bir bilgisayar olduğunu ve kontrol noktası dizininin kaydedilmesi gerektiğini ve bu kaydedicilerin buradaki verileri kaydedebilmelerini istediklerini anlatıyor.
- Denetim noktalarını kaydetmek için kullanılan tf.train.CheckpointSaverHook. o iş yapmak için
, tf.train.CheckpointSaverHook ve tf.train.ChiefSessionCreator kontrol noktası dizin ve iskele için aynı referansları geçirilmelidir. Örneğin kendi parametreleriyle tf.train.MonitoredTrainingSession yukarıdaki yukarıdaki 3 bileşenleri ile uygulanacak olsaydı, böyle bir şey görünecektir:
checkpoint_dir = './ckpt_dir'
scaffold = tf.train.Scaffold()
saverhook = tf.train.CheckpointSaverHook(
checkpoint_dir=checkpoint_dir,
save_secs=5
scaffold=scaffold
)
session_creator = tf.train.ChiefSessionCreator(
scaffold=scaffold,
checkpoint_dir=checkpoint_dir
)
with tf.train.MonitoredSession(
session_creator=session_creator,
hooks=[saverhook]) as mon_sess:
while not mon_sess.should_stop():
mon_sess.run(train_op)
tren + çapraz doğrulama oturumu yapmak için, sadece (yukarısında iken, döngüde) aynı grafikte üzerinden iki farklı setleri geçmesi ve sonra da çalıştırmak için gereken:
mon_sess.run([train_op, cross_validation_loss])
Bu doğrulama için eğitim seti için eğitim duruma getiricisi, hem de validation_loss parametre çalışır ayarlayın. Grafiğiniz doğru bir şekilde uygulandıysa, bu, grafiğin sadece eğitim setinde eğitileceği ve sadece çapraz doğrulama setinde doğrulanacağı anlamına gelir.