使用Keras.mean处理numpy数组报错:'numpy.dtype'无'base_dtype'属性
解决Keras mean函数报错:AttributeError: 'numpy.dtype' object has no attribute 'base_dtype'
你碰到的这个错误其实很常见——Keras后端的K.mean()函数没办法直接处理numpy数组,它的操作对象得是TensorFlow(或者你用的其他Keras后端)的张量(Tensor)。当你直接把numpy数组传进去时,内部的类型处理逻辑就乱了,于是抛出了这个和dtype相关的错误。
给你整理好的修正代码,直接就能运行:
import numpy as np import tensorflow as tf import keras.backend as K # 你的原始numpy数组 arr3 = np.array([ [ [1,2,3], [4,5,6] ], [ [1,2,3], [4,5,6] ], [ [1,2,3], [4,5,6] ] ] ) # 第一步:把numpy数组转成TensorFlow张量,两种方式任选其一 arr_tensor = tf.convert_to_tensor(arr3) # arr_tensor = K.constant(arr3) # 这是另一种等价的转换方式 # 第二步:用张量来计算均值 pooled_grads = K.mean(arr_tensor, axis=(0, 1, 2)) # 第三步:打印结果时,要转成numpy格式才能看到具体数值 print("------------------------") print(pooled_grads.numpy()) # TensorFlow 2.x版本推荐用这个 # 如果是TF1.x环境,你可以用 K.eval(pooled_grads) 来获取结果
简单说下原理:Keras的后端API(比如K.mean)是基于张量计算框架设计的,所有操作都依赖张量的类型系统。直接传numpy数组会导致框架无法正确识别数据的底层类型结构,转换成张量后,Keras就能按照预期完成均值计算了。
内容的提问来源于stack exchange,提问作者venkysmarty
相关产品推荐
相关产品推荐

