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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值