KerasClassifier error when trying to run a LST Model

Tony H

I'm trying to import KerasClassifier into VScode but i keep getting this error

ModuleNotFoundError Traceback (most recent call last) Cell In[7], line 1 1 from tensorflow.keras.wrappers.scikit_learn import KerasClassifier

ModuleNotFoundError: No module named 'tensorflow.keras.wrappers'

Does anyone know a way to fix it or another way around it? Here's my full code for context:

import pandas as pd
import re
from sklearn.model_selection import GridSearchCV
import numpy as np
import datetime
from pandas.tseries.offsets import MonthEnd
from sklearn.preprocessing import MinMaxScaler, LabelEncoder
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LSTM
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.wrappers.scikit_learn import KerasClassifier

df = pd.read_csv('Billing_Report_w_Revshare Calc.csv')

df['Date'] = pd.to_datetime(df['Date'])
df['Date'] = df['Date'].apply(lambda dt: dt.replace(day=30) if dt.month == 6 else dt)

df = df.dropna(subset=['Domain'])

def modify_url_suffix(url):
    pattern = r'\.(?!net|co|org|news|tv|pr|us|edu)([a-z]+)$'
    modified_url = re.sub(pattern, '.com', url, flags=re.I)
    return modified_url

df['Domain'] = df['Domain'].apply(modify_url_suffix)

df = df[['Date', 'Domain', 'DFP Group Code', 'Program Code', 'Total Agency Ad Requests',
         'Total Agency Impressions', 'Total DFP Impressions', 'Reporting Impressions', 'Total Rev',
         'Total Active View eligible impressions', 'Total Active View measurable impressions',
         'Total Active View viewable impressions', 'Customer Rev Share']]

df = df[df['Date'] > '2017-04-01']
df['Customer Rev Share'] = df['Customer Rev Share'].abs()
df = df.groupby(['Date', 'Domain', 'DFP Group Code', 'Program Code']).sum().reset_index()

def calculate_net_cpm(row):
    try:
        return round((row['Total Rev'] * 1000 / row['Total Agency Impressions']) * 0.78, 2)
    except (ZeroDivisionError, Exception):
        return 0

df['net_cpm'] = df.apply(calculate_net_cpm, axis=1)

last_day_previous_month = pd.to_datetime('today') - pd.tseries.offsets.MonthEnd(1)
previous_month_year = last_day_previous_month.year
previous_month_month = last_day_previous_month.month
df_previous_month = df[(df['Date'].dt.year == previous_month_year) & (df['Date'].dt.month == previous_month_month)]
previous_month_domains = df_previous_month['Domain'].unique()
df = df[df['Domain'].isin(previous_month_domains)]

yup_df = df.loc[(df['Program Code'] == 'YUP') & (df['Date'].dt.year == previous_month_year) & (df['Date'].dt.month == previous_month_month)]
yup_df = yup_df[['Domain']]
df = df[df['Domain'].isin(yup_df['Domain'])]

df = df.sort_values(['Domain', 'Date'])

df = df[['Date', 'Domain', 'Total Agency Ad Requests',
         'Total Agency Impressions', 'Total DFP Impressions', 'Reporting Impressions', 'Total Rev',
         'Total Active View eligible impressions', 'Total Active View measurable impressions',
         'Total Active View viewable impressions', 'Customer Rev Share', 'net_cpm']]

count_per_domain = df['Domain'].value_counts()
sufficient_data_domains = count_per_domain[count_per_domain > 4].index
df_sufficient_data = df[df['Domain'].isin(sufficient_data_domains)]
df_insufficient_data = df[~df['Domain'].isin(sufficient_data_domains)]

df_sufficient_data = df_sufficient_data.sort_values(['Domain', 'Date'], ascending=[True, True])

feature_scaler = MinMaxScaler()
numeric_columns = ['Total Agency Ad Requests', 'Total Agency Impressions', 'Total DFP Impressions', 
                   'Reporting Impressions', 'Total Rev', 'Total Active View eligible impressions', 
                   'Total Active View measurable impressions', 'Total Active View viewable impressions', 
                   'Customer Rev Share']

df_sufficient_data[numeric_columns] = feature_scaler.fit_transform(df_sufficient_data[numeric_columns])

time_steps = 5

def reshape_to_3d(arr, time_steps):
    x = []
    for i in range(len(arr) - time_steps):
        x.append(arr[i: (i + time_steps)])
    return np.array(x)

X = []  
y = []  

encoder = LabelEncoder()
encoder.fit(df_sufficient_data['net_cpm'])
num_classes = len(encoder.classes_)

for domain in df_sufficient_data['Domain'].unique():
    domain_data = df_sufficient_data[df_sufficient_data['Domain'] == domain]
    domain_data = domain_data.drop(['Date', 'Domain'], axis=1)
    
    domain_data[numeric_columns] = feature_scaler.transform(domain_data[numeric_columns])

    encoded_y = encoder.transform(domain_data['net_cpm'])
    dummy_y = to_categorical(encoded_y, num_classes=num_classes)
    
    X_domain = domain_data.drop('net_cpm', axis=1).values
    
    X_domain_3d = reshape_to_3d(X_domain, time_steps)
    y_domain = dummy_y[time_steps:]

    if X_domain_3d.ndim == 3 and y_domain.ndim == 2:
        X.append(X_domain_3d)
        y.append(y_domain)

X = np.concatenate(X)
y = np.concatenate(y)

print("Shape of X:", X.shape)
print("Shape of y:", y.shape)

def create_model(lstm_units=50, learning_rate=0.01):
    model = Sequential()
    model.add(LSTM(lstm_units, activation='relu', input_shape=(5, 9)))
    model.add(Dense(580, activation='softmax'))

    optimizer = Adam(learning_rate=learning_rate)
    model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])

    return model

model = KerasClassifier(build_fn=create_model, epochs=10, batch_size=32, verbose=1)

param_grid = {'lstm_units': [30, 50, 70], 'learning_rate': [0.001, 0.01, 0.1]}

grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=-1, cv=3)
grid_result = grid.fit(X, y)

print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))

final_model = create_model(lstm_units=grid_result.best_params_['lstm_units'], learning_rate=grid_result.best_params_['learning_rate'])

final_model.fit(X, y, epochs=10, batch_size=32, validation_split=0.2)

I've tried creating my own custom wrapper but i'm having issues with that.

Obaidullah Zaland

There is a high chance that there is a version mismatch between keras and tensorflow, refer here. As you have not provided the information about platform and library versions, I can't make sure of that, but I will encourage you to include details about the platform and the library versions used, so correct answers can be provided.

Answer: Make sure the correct keras version according to tensorflow version is installed.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

Error when trying to Scaffold a model

Error when trying to run carthage

Error message for one model when trying to run two almost identical pgls models

Error when trying to create tables from model

Error when trying to export randomForest model to PMML

Confusing error when trying to run Python script

Unexpected symbol error when trying to run a function

URI Error with Ruby when trying to run an application

Parser error when trying to run a smart contract

Error when trying to run code based on PysimpleGUIqt

Syntax error when trying to run an IF EXISTS query

Error when trying to run `flutter upgrade`

Compile error when trying to run make

Error when trying to run Scala Play examples

Frozen Error when trying to run rails application

Error when trying to run with GLPK on spyder

Parse error when trying to run haskell function?

Error when trying to run windows steam

Compiler error when trying to run the below program

Error when trying to run multiple mysqli queries

Error when trying to run an executable on a Linux system

Error when trying to run a max function in ocaml

Error when trying to output "Fizz" while trying to run FizzBuzz

npm run always gives error when trying to run scripts

error when trying to run a code at pycharm and when typing pip at the cmd

KerasClassifier object has no attribute model

Getting Error when trying to save Django Model to My Sql Dtatabase

'Resource exhausted' memory error when trying to train a Keras model

Error when trying to rename a pretrained model on tf.keras