Home › Fóruns › Fórum Deep Learning com Python de A a Z: O Curso Completo › KerasClassifier Deprecated
Marcado: Tuning (ajuste) dos parâmetros
- Este tópico contém 5 respostas, 4 vozes e foi atualizado pela última vez 9 meses, 2 semanas atrás por
Denny Ceccon.
- AutorPosts
- 29 de janeiro de 2023 às 20:02 #39128
Uso o KerasClassifier na validação cruzada do problema de Breast Cancer usando o Deep Learning. E retorna o seguinte erro. Poderiam dar uma sugestão de como resolver?
C:\Users\Joao Marcos\AppData\Local\Temp\ipykernel_13744\2036316946.py:9: DeprecationWarning: KerasClassifier is deprecated, use Sci-Keras (https://github.com/adriangb/scikeras) instead. See https://www.adriangb.com/scikeras/stable/migration.html for help migrating.
classificador = KerasClassifier(build_fn = criarRede, epochs = 100, batch_size = 10)6 de fevereiro de 2023 às 08:42 #39523Olá João, você esta utilizando o código fonte disponível no menu de downloads? Pergunto, pois lá forma incluídas algumas correções.
Fabio
3 de outubro de 2023 às 22:51 #42169Boa noite, estou com o mesmo problema.
Mesmo usando o fonte dos downloads tem alguns itens que não funcionam mais, por exemplo a aula “Tuning (ajuste) dos parâmetros”.
Usando o fonte disponibilizado:import pandas as pd
from tensorflow.keras.models import Sequential # atualizado: tensorflow==2.0.0-beta1
import tensorflow as tf # atualizado: tensorflow==2.0.0-beta1
from tensorflow.keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import GridSearchCV
from tensorflow.keras import backend as k # atualizado: tensorflow==2.0.0-beta1previsores = pd.read_csv(‘entradas_breast.csv’)
classe = pd.read_csv(‘saidas_breast.csv’)def criarRede(optimizer, loss, kernel_initializer, activation, neurons): # atualizado: tensorflow==2.0.0-beta1
k.clear_session()
classificador = Sequential([
tf.keras.layers.Dense(units=neurons, activation = activation, kernel_initializer = kernel_initializer, input_dim=30),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(units=neurons, activation = activation, kernel_initializer = kernel_initializer),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(units=1, activation = ‘sigmoid’)])
classificador.compile(optimizer = optimizer, loss = loss, metrics = [‘binary_accuracy’])
return classificadorclassificador = KerasClassifier(build_fn = criarRede)
parametros = {‘batch_size’: [10, 30],
‘epochs’: [50, 100],
‘optimizer’: [‘adam’, ‘sgd’],
‘loss’: [‘binary_crossentropy’, ‘hinge’],
‘kernel_initializer’: [‘random_uniform’, ‘normal’],
‘activation’: [‘relu’, ‘tanh’],
‘neurons’: [16, 8]}
grid_search = GridSearchCV(estimator = classificador,
param_grid = parametros,
scoring = ‘accuracy’,
cv = 5)
grid_search = grid_search.fit(previsores, classe)
melhores_parametros = grid_search.best_params_
melhor_precisao = grid_search.best_score_
Ocorre este erro:
Traceback (most recent call last):
File “D:\Mestrado\2022\IA\DL\Material DL\redes neurais artificiais\classificacao binaria\breast_cancer_tuning.py”, line 4, in <module>
from tensorflow.keras.wrappers.scikit_learn import KerasClassifier
ModuleNotFoundError: No module named ‘tensorflow.keras.wrappers’Alterei o fonte para:
import pandas as pd
import tensorflow as tf
#from tensorflow.keras import models
#from tensorflow.keras import layers
from scikeras.wrappers import KerasClassifier
from sklearn.model_selection import cross_val_score
from tensorflow.keras import backend as k # atualizado: tensorflow==2.0.0-beta1
from tensorflow.keras.models import Sequential # atualizado: tensorflow==2.0.0-beta1
#para fazer o tunning pesquisando as melhores entradas
from sklearn.model_selection import GridSearchCVprevisores = pd.read_csv(‘entradas_breast.csv’)
classe = pd.read_csv(‘saidas_breast.csv’)def criarRede(optimizer, loss, kernel_initializer, activation, neurons): # atualizado: tensorflow==2.0.0-beta1
k.clear_session()
classificador = Sequential([
tf.keras.layers.Dense(units=neurons, Activation = activation, kernel_initializer = kernel_initializer, input_dim=30),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(units=neurons, Activation = activation, kernel_initializer = kernel_initializer),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(units=1, activation = ‘sigmoid’)])
classificador.compile(optimizer = optimizer, loss = loss, metrics = [‘binary_accuracy’])
return classificadorclassificador = KerasClassifier(build_fn = criarRede)
parametros = {‘batch_size’: [10, 30],
‘epochs’: [50, 100],
‘optimizer’: [‘adam’, ‘sgd’],
‘loss’: [‘binary_crossentropy’, ‘hinge’],
‘kernel_initializer’: [‘random_uniform’, ‘normal’],
‘activation’: [‘relu’, ‘tanh’],
‘neurons’: [16, 8]}
grid_search = GridSearchCV(estimator = classificador,
param_grid = parametros,
scoring = ‘accuracy’,
cv = 5)
grid_search = grid_search.fit(previsores, classe)
melhores_parametros = grid_search.best_params_
melhor_precisao = grid_search.best_score_Agora tenho o erro:
ValueError: Invalid parameter activation for estimator KerasClassifier.
This issue can likely be resolved by setting this parameter in the KerasClassifier constructor:
KerasClassifier(activation=relu)
Check the list of available parameters withestimator.get_params().keys()
Já tenho todas as bibliotecas instaladas.
poderiam por favor me enviar um fonte que pode ser executado em 2023?
Muito obrigado.3 de outubro de 2023 às 23:09 #42170Me parece que existem parâmetros inválidos,executei o comando:
print(classificador.get_params().keys())
e tive como resultado:
dict_keys([‘model’,
‘build_fn’,
‘warm_start’,
‘random_state’,
‘optimizer’,
‘loss’,
‘metrics’,
‘batch_size’,
‘validation_batch_size’,
‘verbose’,
‘callbacks’,
‘validation_split’,
‘shuffle’,
‘run_eagerly’,
‘epochs’,
‘class_weight’])Com base nestes parâmetros válidos, reduzi do fonte anterior o que não estava na lista e o fonte ficou assim:
import pandas as pd
import tensorflow as tf
#from tensorflow.keras import models
#from tensorflow.keras import layers
from scikeras.wrappers import KerasClassifier
from sklearn.model_selection import cross_val_score
from tensorflow.keras import backend as k # atualizado: tensorflow==2.0.0-beta1
from tensorflow.keras.models import Sequential # atualizado: tensorflow==2.0.0-beta1
#para fazer o tunning pesquisando as melhores entradas
from sklearn.model_selection import GridSearchCVprevisores = pd.read_csv(‘entradas_breast.csv’)
classe = pd.read_csv(‘saidas_breast.csv’)def criarRede(optimizer,loss):
k.clear_session()
classificador = Sequential([
tf.keras.layers.Dense(units=16, activation = ‘relu’, kernel_initializer = ‘random_uniform’, input_dim=30),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(units=16, activation = ‘relu’, kernel_initializer = ‘random_uniform’),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(units=1, activation = ‘sigmoid’)])
classificador.compile(optimizer=optimizer, loss=’binary_crossentropy’, metrics=[‘binary_accuracy’])
return classificadorclassificador = KerasClassifier(build_fn = criarRede)
parametros = {‘batch_size’: [10, 30],
‘epochs’: [50, 100],
‘optimizer’: [‘adam’, ‘sgd’],
‘loss’: [‘binary_crossentropy’, ‘hinge’]}
grid_search = GridSearchCV(estimator = classificador,
param_grid = parametros,
scoring = ‘accuracy’,
cv = 5)grid_search = grid_search.fit(previsores, classe)
melhores_parametros = grid_search.best_params_
melhor_precisao = grid_search.best_score_porém agora temos o seguinte erro:
TypeError: criarRede() missing 2 required positional arguments: ‘optimizer’ and ‘loss’podem me enviar o fonte dessa que que esteja funcionando?
Muito obrigado6 de outubro de 2023 às 20:32 #42249Boa noite, espero que esteja bem.
Para o item acima poderiam em enviar um fonte atualizado? As demais pendências dos outros tópicos consegui resolver.
4 de maio de 2024 às 08:47 #44647Olá Gabriel,
Desculpe a demora, infelizmente nós perdemos a sua pergunta.
Nós estamos programando a atualização do código dos cursos, mas por enquanto, nossa recomendação é fazer o downgrade das bibliotecas para utilizar a mesma versão apresentada em aula.
- AutorPosts
- Você deve fazer login para responder a este tópico.