Как избежать SIGSEGV-Ошибка с Tkinter и Tensorflow? - PullRequest
1 голос
/ 13 мая 2019

У меня проблемы с некоторым Python-кодом, над которым я сейчас работаю. Я обучил модель с тензорным потоком и сейчас пытаюсь ее использовать. Поэтому я сделал небольшой Tkinter-GUI, который должен выполнять прогон прямой связи со случайным вектором в качестве ввода каждый раз, когда я нажимаю кнопку. Первые несколько попыток, это всегда работает, но после нескольких запусков я получаю SIGSEGV-ошибку: «Процесс завершен с кодом выхода 139 (прерван сигналом 11: SIGSEGV)» У кого-нибудь есть идея, что может вызвать эту проблему? Я подозреваю, что это как-то связано с тем, как Tkinter обрабатывает свои функции-обратные вызовы

Вот соответствующие строки моего кода:

В моей GUI-инициализации я загружаю свою модель Tensorflow:

tf.reset_default_graph()
saver = tf.train.import_meta_graph('./train/infer/infer.meta')
graph = tf.get_default_graph()
self.sess = tf.InteractiveSession()
saver.restore(self.sess, 'model.ckpt-93624')
initialize_tf_model()
self.z = graph.get_tensor_by_name('z:0')
self.G_z = graph.get_tensor_by_name('G_z:0')

И после этого я инициализирую свою кнопку функцией как команда:

self.slogan2 = Button(frame,
                         text="Test",
                         command=self.foo_function)
    self.slogan2.pack(side=LEFT)

А вот моя функция foo_function, которая выполняет прямую передачу:

def foo_function(self):
    _z = (np.random.rand(1, 100) * 2.) - 1
    _G_z = self.sess.run(self.G_z, {self.z: _z})

Кто-нибудь знает, что я могу делать не так?

Большое спасибо!

...