KerasClassifier Deprecated

Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #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)

    #39523
    Fábio Spak
    Participante

      Olá 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

      #42169

      Boa 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-beta1

      previsores = 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 classificador

      classificador = 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 GridSearchCV

      previsores = 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 classificador

      classificador = 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 with estimator.get_params().keys()

      Já tenho todas as bibliotecas instaladas.
      poderiam por favor me enviar um fonte que pode ser executado em 2023?
      Muito obrigado.

       

      #42170

      Me 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 GridSearchCV

      previsores = 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 classificador

      classificador = 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 obrigado

      #42249

      Boa 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.

    Visualizando 5 posts - 1 até 5 (de 5 do total)
    • Você deve fazer login para responder a este tópico.