debug --“AttributeError: ‘Tensor‘ object has no attribute ‘numpy‘ --- tensor 没有 numpy()属性”

    用回调函数取cnn中间层的kernel一切正常              
 

class plot_kernel(keras.callbacks.Callback):    
    def on_epoch_end(self, batch, logs={}):
        img = Image.fromarray(   model.get_layer(name="cnn_layer").kernel .numpy ()[:,:,0,i]   *500+200   )  
        ......

但是将kernel 换为 output 报错:“AttributeError: 'Tensor' object has no attribute 'numpy'

......
        img = Image.fromarray(   model.get_layer(name="cnn_layer").output .numpy ()[:,:,0,i]   *500+200   ) 
......

搜索别人的解决方法,有2类解决方式,但是不work:

  • 1,从tensorflow1 变为tensorflow2, 这种解决方式对于我的bug不起作用。我用的是tensorflow2。

  • 2,使用tensorflow里的eager 模式, 这种解决方式对于我的bug也不起作用。eager模式默认打开。

于是做了不同的尝试

  • 更换钩子位置不行  
    • def on_epoch_end(self, epoch, logs=None):   
    • def on_batch_begin(self, batch, logs=None):
  • 降维不行                  
    • img = Image.fromarray(   tf.squeeze(    model.get_layer(name="cnn_layer").output, axis=None ) .numpy ()[:,:,0,i]   *500+200   )  
  • print(tensor) ,显示: 
    Tensor("cnn_layer/Sigmoid_2:0", shape=(None, 4, 4, 16), dtype=float32) 

       none 说明数据为空,

最终答案就是计算结束后内存已经释放,

用model.get_layer(name="cnn_layer").output获取不到中间数据, 只能获取类似weight权重和cnn卷积核之类的非中间数据

=====================================

参考

Tensorflow2.0 卷积神经网络可视化 (一)中间特征层可视化_

TF2.0:获取网络中某一层的输出结果 

在 TensorBoard 中使用 Embedding Projector 呈现数据  |  TensorFlow  

tf.keras.callbacks.TensorBoard  |  TensorFlow v2.11.0

https://www.tensorflow.org/api_docs/python/tf/keras/callbacks/TensorBoard

tf.keras.callbacks.TensorBoard(
    log_dir='logs',
    histogram_freq=0,
    write_graph=True,   #  获取图像
    write_images=False,
    write_steps_per_second=False,
    update_freq='epoch',
    profile_batch=0,
    embeddings_freq=0,
    embeddings_metadata=None,
    **kwargs
)

python - Keras, How to get the output of each layer? - Stack Overflow  

里面提及了多种方法,基本上大同小异,都是建立一个模型的子集,然后重新计算一遍。

features_layer1 = tf.keras.models.Model(
    inputs=model.inputs,
    outputs=model.get_layer(name="layer1").output,
)

print(features_layer1)

你可能感兴趣的:(debug,python,numpy,开发语言)