KERAS-监视嵌入层时张量板回调悬挂



我试图将keras钩到张板上,以使模型中的嵌入层可视化。我不确定为什么,但是在时代结束后,Keras只是坐在那里什么都不做,而不是编写日志文件或检查点。下面的代码(模型的定义无关紧要,它具有单个嵌入层和几个GRU层,然后是密集层(:

filepath="./logs/modelBasicGRU.h5"
checkpoint = ModelCheckpoint(filepath, monitor='val_loss', verbose=1, save_best_only=True, mode='min')
#do the embedding vizualization
tb_callback = TensorBoard(log_dir='./logs', histogram_freq=1, write_graph=False,
                          embeddings_freq=1, batch_size=32,
                          embeddings_layer_names=embeddings_layer_names)
#later you need to open cmd for environment and do tensorboard --logdir=pathtologs
#then go to localhost:port
callbacks_list = [checkpoint, tb_callback]

history = model.fit_generator(train_gen,
                              steps_per_epoch=10,
                              epochs=40,
                              validation_data=val_gen,
                              validation_steps=val_steps,callbacks=callbacks_list)

当段结束时,它只是处于这种状态:

Epoch 1/40
 9/10 [==========================>...] - ETA: 1s - loss: 6.8852e-04 

我检查了我的日志目录 - 它不是写检查点,而是在那里写入任何日志文件。发生了什么事?

注意 - 当我在20分钟后杀死它时,请等待:

 File "C:UsersmaximAnaconda3envsPy35libsite-packageskerasenginetraining.py", line 2235, in evaluate_generator
    generator_output = next(output_generator)
  File "C:UsersmaximAnaconda3envsPy35libsite-packageskerasutilsdata_utils.py", line 712, in get
    time.sleep(self.wait_time)

我有一种感觉,它无限期地在发电机上迭代(我的发电机是以太词,它永远不会结束(,而不仅仅是示例。

只是为了突出显示 - 我只需要可视化嵌入层,我在张板中不需要其他任何东西。因此,如果有一种可视化嵌入的更简单的方法 - 请让我知道。

将其回调出来:https://github.com/keras-team/keras/keras/issues/3358

导出到张板时,它希望验证数据在内存中,而不是生成器。对此进行了重新确定以构建数据的正确直方图和分布 - 因此张板将需要一次查看整个数据集。另一方面,即使您设置了contagragy_freq = 0(无直方图记录(,它仍然对嵌入图层无济于事,它们似乎也需要整个验证数据集。

据我所知,KERAS团队试图使嵌入具有自己的单独参数embedding_data,以确保您可以可视化具有与验证数据不同的数据的嵌入者,但我看不到它已实现:https://github.com/keras-team/keras/pull/7766

因此,目前只有解决方案是在内存中推动验证设置。First GitHub链接具有一个代码剪切的代码,该代码将张量板回电,然后在导出到张量之前,它填充了验证数据变量可以有效地解决该问题 - 除了您仍然需要将尽可能多的验证数据推入存储器中的事实。

最新更新