Home › Forums › Fórum Deep Learning com Python de A a Z: O Curso Completo › KerasClassifier Deprecated
Tagged: Tuning (ajuste) dos parâmetros
- This topic has 5 replies, 4 voices, and was last updated 1 year, 5 months ago by Denny Ceccon. 
- AuthorPosts
- 29 de janeiro de 2023 at 20:02 #39128Uso 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 at 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 at 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 at 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 at 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 at 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. 
- AuthorPosts
- You must be logged in to reply to this topic.