Enigmacy
Enigmacy

Reputation: 43

set_weights for a layer issue

I'm getting an error about set_weights but I can not fix it. I've added weight as uniform but it's not accepting it. I'm trying to make an ANN‌ with two hidden layers and a binary output level. the code is:

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Importing the dataset
dataset = pd.read_csv('Churn_Modelling.csv')
X = dataset.iloc[:, 3: 13].values
y = dataset.iloc[:, -1].values

#Encoding Categorical data
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.compose import ColumnTransformer
labelencoder_X_1 = LabelEncoder()
X[:, 1] = labelencoder_X_1.fit_transform(X[:, 1])
labelencoder_X_2 = LabelEncoder()
X[:, 2] = labelencoder_X_2.fit_transform(X[:, 2])
ct = ColumnTransformer([('one_hot_encoder', OneHotEncoder(categories='auto'), [1])],remainder='passthrough')
onehotencoder = OneHotEncoder(categories=[1])
X = ct.fit_transform(X)
X = X[:, 1:]

# Splitting the dataset into the Training set and Test set
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

# Part 2 - Kares
import keras
from keras.models import Sequential
from keras.layers import Dense

# Initialising the ANN
classifier = Sequential()

# Add input layer and first hidden layer
classifier.add(Dense(units=6, weights='uniform', activation='relu', input_dim=11))

# Second hidden layer
classifier.add(Dense(units=6, weights='uniform', activation='relu'))

# Output layer
classifier.add(Dense(units=1, weights='uniform', activation='sigmoid'))

# Compiling the ANN
classifier.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

And the error I'm getting is:

ValueError: You called `set_weights(weights)` on layer "dense_1" with a weight list of length 7, but the layer was expecting 0 weights. Provided weights: uniform...

What's the problem? Thanks.

Upvotes: 0

Views: 1631

Answers (2)

Augusto Maillo
Augusto Maillo

Reputation: 180

See Keras documentation for Core Layers to check properly usage. You're trying to set weights initializer for your layers. Here you can see keras default initializers.

Your code should be:

classifier.add(Dense(units=6, kernel_initializer = keras.initializers.RandomUniform(), activation='relu', input_dim=11))

Upvotes: 0

Zabir Al Nazi Nabil
Zabir Al Nazi Nabil

Reputation: 11198

You need to use kernel_initializer and bias_initializer.

classifier.add(Dense(units=6, kernel_initializer='glorot_uniform', bias_initializer='glorot_uniform', activation='relu'))

Or,

keras.initializers.RandomUniform(minval=-0.05, maxval=0.05, seed=None)

To set weights for a layer, you have to use set_weights https://keras.io/layers/about-keras-layers/

Reference: https://keras.io/initializers/

https://keras.io/layers/core/

Upvotes: 1

Related Questions