2017-10-05 55 views
0

我是Keras的新手,我打算在每个纪元存储我的网络输出。为此,我想使用Tensorbaord观察其环境中的输出层。Keras的回调函数可以在每个纪元保存预测的输出

class OutputObserver(Callback): 
"""" 
callback to observe the output of the network 
""" 

    def on_train_begin(self, logs={}): 
     self.epoch = [] 
     self.out_log = [] 

    def on_epoch_end(self, epoch, logs={}): 
     self.epoch.append(epoch) 
     self.out_log.append(self.model.get_layer('Dense03/Output').output) 

这会将输出张量存储到列表中。问题是我不能做到1.将它转换为Numpy数组,以便可以读取CSV,...文件,2.使用Tensorflow编写摘要(因为Keras不具备此功能),然后分析输出在Tensorboard。

我很高兴听到您对存储和可视化输出层在每个培训时代的意见。

此致敬礼, 赛义德。

+1

也许[此答案](https://stackoverflow.com/a/45321332/1531463) (** Edit **之后的部分)可以提供帮助。它使用TensorBoard通过'on_epoch_end'中的模型提供验证数据来显示输出图层。 –

+0

@ Yu-Yang非常感谢。我发现答案很有帮助。 –

回答

2

要保存每个时期的输出图层,您需要将训练/验证数据传递给回调对象。我使用的回调如下,

class OutputObserver(Callback): 
"""" 
callback to observe the output of the network 
""" 

def __init__(self, xy): 
    self.out_log = [] 
    self.xy = xy 

def on_epoch_end(self, epoch, logs={}): 
    self.out_log.append(self.model.predict(self.xy.x_train, batch_size=p.bath_size)) 

其中xy.x_train是训练数据。

目前,out_log阵列形状的numpy.ndarray(epoch_number,data_number,prediction_length):

type(prediction_logs[0]) 
Out[62]: numpy.ndarray