birden çok oturum ve grafikler yönetme Ses yolu

oy
1

Birden oturumlarda birden Keras modellerini yönetmek istiyorum. Benim uygulama modelleri oluşturma, kaydetme ve bunları yüklemeden ek olarak, aynı zamanda canlı olabilir bir yapıda bulunmaktadır.

Bu durumu yönetmenin doğru yolu nedir?

Şu anda, bir model, bir sargı sınıfın bir örneği ile temsil edilmektedir. Bu eğitim, tasarrufu, yükleme ve tahmin kullanılmaktadır. Bir tf.Graphve tf.Sessionörnek başına oluşturulur ve bunlar gerçek modeli gerektiren her işlevi kullanılır.

class NN:
    def __init__(self):
        self.graph = tf.Graph()
        self.session = tf.Session(graph=self.graph)

    def predict(self, x):
        with self.graph.as_default():
            with self.session.as_default():
                return self.model.predict(x)

Kullanarak benzer işlevleri withifadeleri (ağırlıkları .h5 için ve model JSON) kaydetme ve yükleme, şebekeyi derleme uydurma için oluşturulur. Modele ihtiyaç vardır yüzden, ne zaman grafiği ve oturum bağlamına getirilir.

Bu garip bir hatayla (sonuçlandı Q ileri bağlam için) ve ben bununla başa standart yol nedir, merak bırakıldı. Oluşturmadan veya bir model yüklemeden önce mümkün olan tüm kaynakları serbest bırakmak için çalıştı, ama yardım etmedi. Bu fonksiyon internetten alıntı olası tüm rutinleri sadece bir derleme olduğunu ve tamamen varsayımları olduğunu.

def _new_session(self):
    if self.session is not None:
        self.session.close()
    k.clear_session()
    gc.collect()
    self.graph = tf.Graph()
    self.session = tf.Session(graph=self.graph)

Ben de benzer bir durumun iyi belgelerine bulamadı ettik. Yani ben çok bu işe gerçek bir fikir takdir ediyorum.


o yerde oldukça hepsi gibi ben eski soruyu silmek gerekebilir. soran sırasında ben neler olduğunu bilmiyordum. Ama şimdilik yok.


Bazı spesifik sorular ortaya çıkmıştır.

  • Sadece derleme yapar rağmen Yükleme ve model çalışmalarına yapma tahminler, derleme ve uydurma bunu dikkate almaz. İki bağlamlarda hiçbir şekilde farklı mı? Yüklenen modeli tam olarak aynı mı?
  • modellerini manipüle zaman hangi noktaları Yeni bağlam oluşturulmalıdır? (Yük, derleme, uydurma de örneğin, muhtemelen her öngörü ile)
  • Önceki bağlamlarda kaynaklarının serbest bırakılması edilirken hangi adımlar gerekli almaya? Ya da bir ağ bertaraf edildiğinde veya yeni bağlam oluştururken.
  • Neden tam çoklu modeller için gerekli bağlam anahtarı nedir?
  • farklı şeyler grafik ve seans yürütür göz önüne alındığında, oturumun vs grafiğin rolleri nelerdir?

Güncellemeler

  • uydurma, Derleme ve bir şebekeyi tasarrufu herhangi bağlam hile olmadan çalışır. aynı bağlamda başka model için aynı şeyi çok çalışır (veya en azından bir hata üretmez).
  • Yukarıda ek olarak kaydedilmiş modeli yükleme ve çok eserler tahmin sağ eğitimden sonra ve her iki model için,! Şimdi tahmin, doğru, ama yine hiçbir hata yapılmış olup olmadığına emin değilim. Bu sadece daha da fazla Yukarıda yöneltilen soruya yalvarır neden farklı bağlamlar gereklidir?

Hata ile altta yatan sorun (ve biraz embarassingly) nihayet olmuştur çözülmesi bütün paketleri güncelleyerek.

Oluştur 08/11/2018 saat 11:31
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
0

DÜZENLEME: Aslında, yine nasıl görmeye K.get_session()çalışır, geçerli varsayılan oturumu dönmelidir, bu yüzden emin değilim set_sessionorada anlamlı bir şey yapıyor. Denemek ama muhtemelen bu yardımcı olmaz istiyorum sadece durumda ben cevabı bırakacağım.


Belki de böyle bir şey ile çalışmak için alabilirsiniz:

from contextlib import contextmanager

class NN:
    def __init__(self):
        self.graph = tf.Graph()
        self.session = tf.Session(graph=self.graph)

    def predict(self, x):
        with self._context():
            return self.model.predict(x)

    @contextmanager
    def _context(self):
        prev_sess = K.get_session()
        K.set_session(self.session)
        with self.graph.as_default(), self.session.as_default():
            yield
        K.set_session(prev_sess)

Keras oturumu nesnesi genel değişken olduğunu unutmayın, bu yüzden bu sürece birden çok iş parçacığı bu bağlamları kullanmaya kalkmayın olarak çalışması gerekir herhalde.

Cevap 08/11/2018 saat 12:00
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more