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

使用RandomizedSearchCV寻优神经网络参数时遇类型转换错误求助

问题排查与解决方案

核心错误分析

你的代码存在两个关键问题,直接导致了张量转换错误:

  1. 冗余且错误的激活函数赋值
    在binary_nn_builder函数中,你手动尝试将activation变量替换为keras.activations.tanh(x)或keras.activations.relu(x),但变量x从未定义,且这部分代码完全多余——你已经在Dense层参数中指定了激活函数,手动赋值会把原本的字符串类型激活函数名变成无效的张量对象,引发模型编译时的数据类型冲突。

  2. 输出层激活函数逻辑错误
    二分类任务的输出层必须使用sigmoid激活函数,才能让输出值落在[0,1]区间,匹配binary_crossentropy损失函数的要求。你现在将输出层激活函数与隐藏层设为一致的tanh或relu,不仅逻辑错误,还会引发数值范围不匹配导致的张量转换问题。

修正后的完整代码

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.optimizers import Adam
from sklearn.model_selection import RandomizedSearchCV
from tensorflow.keras.wrappers.scikit_learn import KerasClassifier

def binary_nn_builder(units, activation):
    model = Sequential()
    model.add(Input(shape=x_train_norm.shape[1]))
    # 隐藏层使用指定的激活函数
    model.add(Dense(units, kernel_initializer='normal', activation=activation))
    model.add(Dense(units, kernel_initializer='normal', activation=activation))
    # 输出层固定用sigmoid适配二分类任务
    model.add(Dense(1, kernel_initializer='normal', activation='sigmoid'))
    optimizer = Adam(learning_rate=0.01)  # 新版Keras中lr参数已替换为learning_rate
    model.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=['accuracy'])
    return model

classifier_search = KerasClassifier(build_fn=binary_nn_builder, batch_size=22)

parameters = {
    "activation": ['tanh', 'relu'],
    "units": np.arange(4, 20, 1).tolist()
}

# 确保输入数据为有效float32类型
x_train_norm = np.asarray(x_train_norm).astype(np.float32)
y_train = np.asarray(y_train).astype(np.float32)

rnd_search_cv = RandomizedSearchCV(
    estimator=classifier_search,
    param_distributions=parameters,
    n_iter=20,
    cv=3,
    verbose=0,
    n_jobs=-1
)

rnd_search_cv.fit(x_train_norm, y_train, verbose=0, epochs=100)

额外注意事项

  • 检查x_train_norm和y_train是否存在缺失值或非数值类型数据,可通过np.isnan(x_train_norm).any()验证,这类数据会导致类型转换失败。
  • 新版TensorFlow/Keras中Adam优化器的lr参数已被弃用,改用learning_rate避免警告。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:42:50