Testowałem przykładowy notebook w Flowers_tf_lite.ipynb i kiedy dostaję do treningu komórki, nie działa.

Wygląda na to, że zawsze jest w nieskończoności

Trenuj model - nieznany

0
Pedro Asseiro 7 kwiecień 2020, 14:14

2 odpowiedzi

Najlepsza odpowiedź

@Pedro Asseiro Właściwie Iterator generuje dane dynamicznie. Więc długość Iteratora DataSet jest nieznana, aż dojdziesz do niego przynajmniej raz. Możesz przekazać argument steps_per_epoch do model.fit_generator, jak pokazano poniżej. Następnie wydrukuje, jak się spodziewasz.

with tf.device("/device:GPU:0"):
  history = model.fit_generator(train_generator, steps_per_epoch=len(train_generator),
                    epochs=epochs, 
                    validation_data=val_generator,validation_steps=len(val_generator))

Edycja 1:

@Pedro Asseiro @gokul_uf Aktualizuję powyższy kod oparty na twoich komentarzach. Musisz dodać steps_per_epoch, a także validation_steps. Kolejna zmiana, którą wykonałem, była uruchomiona model.fit w ramach GPU. Co więcej, zrobiłem dokładnie to samo do model.fit w sekcji Dostrajanie.

with tf.device("/device:GPU:0"):
  history_fine = model.fit_generator(train_generator, steps_per_epoch=len(train_generator),
                         epochs=5,
                         validation_data=val_generator,validation_steps=len(val_generator))

Sprawdź Github Gist tutaj. Dzięki!

Daj mi znać, jeśli coś nie działa. Dzięki!

0
Vishnuvardhan Janapati 9 kwiecień 2020, 19:15

W rzeczywistości działa, Unknown, który widzisz, jest dlatego, że fit_generator nie dowie się, ile partii znajduje się w zestawie danych. Próbowałem użyć argumentu steps_in_epoch w fit_from_generator, co rzuca inne kwestie związane z biblioteką.

Praca wokół byłaby ręcznie zatrzymywać szkolenie, gdy myślisz, że wydajność jest wystarczająco dobra i kontynuuj z resztą notebooka. Możesz zatrzymać bieżące wykonanie, naciskając przycisk "STOP" w lewym górnym rogu komórki lub z menu wykonawczego.

0
gokul_uf 7 kwiecień 2020, 12:53