在鸢尾花数据集上运行ANFIS算法添加FuzzyLayer时遇TypeError: <lambda>() got an unexpected keyword argument 'dtype'问题求助
解决ANFIS算法中FuzzyLayer的
TypeError: <lambda>() got an unexpected keyword argument 'dtype'问题 我来帮你搞定这个报错——你遇到的这个问题本质很简单:Keras在调用自定义初始化器(也就是你写的那个lambda函数)时,会自动传入dtype参数,但你的lambda没有定义这个参数来接收它,所以就触发了类型错误。
针对这个问题,有两种直接有效的解决方法:
方法1:修改lambda函数,添加dtype参数
直接给你的lambda加上dtype=None的参数(哪怕你用不到它),让它能接收Keras传递的参数:
f_layer = FuzzyLayer(K, initializer_centers=lambda x, dtype=None: np.transpose(np.array([x_train[i] for i in indices])), input_dim=4)
这里给dtype设置默认值None,确保即使Keras不传这个参数也不会出错,同时兼容当前版本的Keras调用逻辑。
方法2:用显式函数替代lambda(更清晰)
如果觉得lambda写法不够直观,也可以把初始化逻辑包装成一个普通函数,明确接收Keras会传递的shape和dtype参数:
def init_centers(shape, dtype=None): # shape参数是Keras会自动传入的,我们这里不需要用到它,直接返回预定义的中心数组 return np.transpose(np.array([x_train[i] for i in indices])) f_layer = FuzzyLayer(K, initializer_centers=init_centers, input_dim=4)
这种方式可读性更强,后续如果需要修改初始化逻辑也更方便。
补充说明
你用的Keras 2.8.0版本中,所有初始化器函数都会被自动传入dtype参数,而仓库里的原始代码可能是在更早的Keras版本下编写的——那时候Keras可能不会强制传递这个参数,所以现在直接运行就会报错。上面两种方法都能完美适配当前版本的Keras调用规则。
内容的提问来源于stack exchange,提问作者crazycoders
相关产品推荐
相关产品推荐

