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.