簡體   English   中英

使用 RandomizedSearchCV 找到最佳神經元數量和激活 function

[英]Using RandomizedSearchCV to find the best number of neurons and activation function

我使用下面的代碼找到兩個隱藏層中神經元的最佳數量和最佳激活 function。

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))
    model.add(Dense(1, kernel_initializer='normal', activation=activation))
    if activation =='tanh':
        activation = keras.activations.tanh(x)
    elif activation =='relu':
        activation = keras.activations.relu(x)
    optimizer = keras.optimizers.Adam(lr=0.01)
    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()
}

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)

但是我得到一個錯誤:

Failed to convert a NumPy array to a Tensor (Unsupported object type float).

我相信問題出在您正在安裝的數據中的某個地方。

我能夠使用一些生成的數據讓它運行:

import tensorflow as tf
from tensorflow import keras
from keras.wrappers.scikit_learn import KerasClassifier
from tensorflow.keras.layers import Input, Dense
from sklearn.datasets import make_classification
import numpy as np
from sklearn.model_selection import RandomizedSearchCV

def binary_nn_builder(units,activation):
    model = keras.Sequential()
    model.add(Input(shape=X.shape[1]))
    model.add(Dense(units, kernel_initializer='normal', activation=activation))
    model.add(Dense(units, kernel_initializer='normal', activation=activation))
    model.add(Dense(1, kernel_initializer='normal', activation=activation))
    if activation =='tanh':
        activation = keras.activations.tanh(X)
    elif activation =='relu':
        activation = keras.activations.relu(X)
    optimizer = keras.optimizers.Adam(lr=0.01)
    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()
}

X, y = make_classification(n_samples=100, n_features=4, n_redundant=0, n_informative=2,
                           n_clusters_per_class=1, random_state=14)

X = np.asarray(X).astype(np.float32)
y = np.asarray(y).astype(np.float32)

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

rnd_search_cv.fit(X, y,verbose=0,epochs=100)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM