You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在鸢尾花数据集上运行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 16:27:43