Я пытаюсь обучить модель FNN обнаружению мошенничества с кредитными картами. Мои категориальные характеристики: торговец, категория, город и штат. Я также стандартизировал свои числовые функции с помощью StandardScaler. Сначала я использую кодирование меток для категориальных признаков, чтобы преобразовать их в целочисленные значения. Затем я захотел создать вложения для категориальных признаков модели нейронной сети. Когда я попытался запустить код, я получаю эту ошибку:
ValueError: исключение при вызове Functional.call().
Ввод 0 слоя «dense_6» несовместим со слоем: ожидалось, что ось -1 входной формы будет иметь значение 444, но получен ввод с формой (Нет, 708)
Вот мой код:< /p>
# Split data into training, validation, and test sets (70%, 15%, 15%)
from sklearn.model_selection import train_test_split
X = df.drop(columns=['is_fraud'])
y = df['is_fraud']
X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.3, random_state=42) # 70% train, 30% temp
X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=42) # Split temp into 15% val and 15% test
from sklearn.preprocessing import LabelEncoder, StandardScaler
# Label Encoding
categorical_columns = ['merchant', 'category', 'city', 'state']
label_encoded = {}
for col in categorical_columns:
le = LabelEncoder()
X_train[col] = le.fit_transform(X_train[col])
X_val[col] = le.transform(X_val[col])
X_test[col] = le.transform(X_test[col])
label_encoded[col] = le
# Normalization
scaler = StandardScaler()
numerical_features = ['cc_num', 'amt', 'lat', 'long', 'merch_lat', 'merch_long', 'trans_hour', 'trans_day', 'trans_year', 'amt_ratio', 'daily_transaction_count', 'user_location_distance']
X_train_numerical = scaler.fit_transform(X_train[numerical_features])
X_val_numerical = scaler.transform(X_val[numerical_features])
X_test_numerical = scaler.transform(X_test[numerical_features])
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Embedding, Dense, Flatten, Concatenate
from sklearn.metrics import precision_score, recall_score, roc_auc_score, roc_curve
import matplotlib.pyplot as plt
# Define Embedding Dimensions
embedding_dim = {
'merchant': 200,
'category': 7,
'city': 200,
'state': 25
}
# Create embeddings and flatten to 1D vectors
merchant_input = Input(shape=(1,), name='merchant')
merchant_embedding = Embedding(input_dim=len(label_encoded['merchant'].classes_), output_dim=embedding_dim['merchant'])(merchant_input)
merchant_embedding = Flatten()(merchant_embedding)
category_input = Input(shape=(1,), name='category')
category_embedding = Embedding(input_dim=len(label_encoded['category'].classes_), output_dim=embedding_dim['category'])(category_input)
category_embedding = Flatten()(category_embedding)
city_input = Input(shape=(1,), name='city')
city_embedding = Embedding(input_dim=len(label_encoded['city'].classes_), output_dim=embedding_dim['city'])(city_input)
city_embedding = Flatten()(city_embedding)
state_input = Input(shape=(1,), name='state')
state_embedding = Embedding(input_dim=len(label_encoded['state'].classes_), output_dim=embedding_dim['state'])(state_input)
state_embedding = Flatten()(state_embedding)
numerical_input = Input(shape=(len(numerical_features),), name='numerical_features')
# Concatenate embeddings and numerical inputs
concat_embed = Concatenate()([merchant_embedding, category_embedding, city_embedding, state_embedding])
concat_layer = Concatenate()([concat_embed, numerical_input])
# FNN Model
x = Dense(32, activation='relu')(concat_layer)
x = Dense(32, activation='relu')(x)
output = Dense(1, activation='sigmoid')(x)
fnn_model = Model(inputs=[merchant_input, category_input, city_input, state_input, numerical_input], outputs=output)
fnn_model.compile(optimizer=tf.keras.optimizers.Adam(0.001), loss='binary_crossentropy', metrics=['accuracy'])
# Prepare Training and Validation Data
train_inputs = {
'merchant': X_train['merchant'],
'category': X_train['category'],
'city': X_train['city'],
'state': X_train['state'],
'numerical_features': X_train_numerical
}
val_inputs = {
'merchant': X_val['merchant'],
'category': X_val['category'],
'city': X_val['city'],
'state': X_val['state'],
'numerical_features': X_val_numerical
}
# Train model
history = fnn_model.fit(train_inputs, y_train, epochs=100, batch_size=32, validation_data=(val_inputs, y_val), verbose=0)
Подробнее здесь: https://stackoverflow.com/questions/791 ... ceived-inp
Ошибка значения: ожидалось, что ось -1 входной формы будет иметь значение 444, но получен ввод с формой (нет, 708). ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение