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

使用Keras Tuner RandomSearch进行超参数调优时遭遇InvalidArgumentError: PyLong_AsSize_t failure错误的技术求助

解析Keras Tuner调参时的PyLong_AsSize_t failure错误

首先帮你拆解这个错误,再结合你的代码分析可能的原因和解决办法:

错误含义

PyLong_AsSize_t failure本质是Python整数转换为C语言的size_t类型失败。size_t是C里用来表示内存大小、数组索引的无符号整数类型,它只接受非负且在其取值范围内的数值。当传入的整数是负数,或者数值超过size_t的最大容纳值时,就会触发这个转换错误。

可能的原因及对应解决方案

1. 数据处理逻辑错误(最优先修正)

看你的代码,你先对整个Data做了归一化:

scaler = MinMaxScaler(feature_range=(0, 1))
dataset = scaler.fit_transform(Data)

但后续分割训练测试集时,却直接用了原始未归一化的Data:

X_train,X_test,Y_train,Y_test=train_test_split(Data.drop(labels=['SOC'],axis=1),Data['SOC'], test_size=0.35,random_state=0)

这不仅是逻辑错误(可能导致模型训练不稳定),极端情况下还可能因数据数值过大,触发内部计算的数值溢出,间接引发类型转换错误。

修正方案:
先分割数据再归一化(避免数据泄露),用归一化后的特征训练模型:

# 先拆分特征和标签
X = Data.drop(labels=['SOC'], axis=1)
Y = Data['SOC']

# 分割训练测试集
X_train,X_test,Y_train,Y_test=train_test_split(X, Y, test_size=0.35,random_state=0)

# 仅对特征做归一化(标签按需选择是否归一化)
scaler = MinMaxScaler(feature_range=(0, 1))
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 搜索时传入归一化后的特征
tuner.search(X_train_scaled,Y_train,epochs=100,validation_data=(X_test_scaled,Y_test), verbose=1)

2. TensorFlow与Keras Tuner版本不兼容

这个错误常出现在版本不匹配的环境中,比如旧版TensorFlow处理Keras Tuner生成的numpy整数类型时,会出现类型转换bug。

解决方案:
升级到稳定兼容的版本:

pip install --upgrade tensorflow keras-tuner

3. 超参数类型转换问题

Keras Tuner生成的超参数可能是numpy整数类型,而TensorFlow内部期望Python原生整数,这会触发转换失败。

解决方案:
在build_model函数中强制将超参数转为Python原生整数:

def build_model(hp):
    model=Sequential()
    # 转换为Python原生整数
    num_layers = int(hp.Int('num_layers',1,17))
    for i in range(num_layers):
        units = int(hp.Int('units_' + str(i), min_value=1, max_value=17,step=1))
        model.add(Dense(units=units, activation='relu'))
    model.add(layers.Dense(1,activation='linear'))
    model.compile(optimizer='adam',loss='mean_squared_error',metrics=['mean_squared_error','mae'])
    return model

4. 模型复杂度或资源压力过大

你设置了max_trials=290、executions_per_trial=3,加上最多17层的模型,多次训练后可能导致内存占用过高,引发内部数值溢出。

解决方案:

  • 先缩小超参数范围测试,比如把num_layers的上限改成5,验证是否还会报错
  • 暂时将executions_per_trial改为1,降低单次trial的资源消耗
  • 确保输入数据是float32类型,减少内存占用:
    X_train_scaled = X_train_scaled.astype('float32')
    X_test_scaled = X_test_scaled.astype('float32')
    Y_train = Y_train.astype('float32')
    Y_test = Y_test.astype('float32')
    

内容的提问来源于stack exchange,提问作者MaikLinh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 08:38:10