2017-10-05 60 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