Я преобразовал свою модель из Conv2D в простую DNN. Я мог как-то решить ошибку формы ввода / вывода. Но теперь моя модель дает безумные результаты - ужасные потери и нулевая точность. Может ли кто-нибудь помочь?
"""
trying hands on first ML program - 1D model
"""
import time
import numpy as np
# import matplotlib.pyplot as plt
import pandas as pd
import tensorflow as tf
import keras
from keras.models import Model
from keras.layers import Input, Dense, Activation
from keras.utils import to_categorical
from keras.optimizers import RMSprop
from numba import jit, cuda
start = time.time()
data = pd.read_csv(r"Pets_Data.csv", index_col='Date')
# data = data.reset_index(drop=False)
target = "Hippo"
filter = (data["Cats"] > 0) & (data[target] > 0)
total = data.where(filter).dropna().shape[0]
x_df = data.where(filter).dropna()
y_df = pd.DataFrame(data=x_df, columns=[target], copy=True)
x_df = x_df.drop(target, axis=1)
# input_shape = x_df.shape[1]
Train_ratio = 0.8
train_x = x_df[:int(total * Train_ratio)]
train_y = y_df[:int(total * Train_ratio)]
x = np.array(train_x, copy='True', order='K').flatten(order='C')
y = np.array(train_y, copy='True', order='K').flatten(order='C')
# tr_x = to_categorical(x,959)
# tr_y = to_categorical(y,959)
test_x = np.array(x_df[int(total * Train_ratio):], copy='True', order='K')#.flatten(order='C')
test_y = np.array(y_df[int(total * Train_ratio):], copy='True', order='K')#.flatten(order='C')
# x_test_new = to_categorical(test_x, 240)
# y_test_new = to_categorical(test_y,240)
inputs = Input(shape=(43,))
output_1 = Dense(256, activation='relu')(inputs)
output_2 = Dense(128, activation='relu')(output_1)
predictions = Dense(959, activation ='softmax')(output_2)
# Build the model
model = Model(inputs=inputs, outputs=predictions)
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) #loss='mean_squared_error'
model.summary()
jit(target='cuda')
# Fit the model
model.fit(train_x, train_y, epochs=100, batch_size=43, verbose=1) # starts training
end = time.time()
print(f"time taken : {end-start:.4f} seconds.")
# Evaluate model
score = model.evaluate(test_x, test_y, batch_size=None)
print(f"loss on test: {score[0]*100:>6.2f}%, accuracy {score[1]*100:>6.2f}% ")
endtime = time.time()
print(f"time taken : {endtime-start:>6,.4f} seconds")
'' '
Layer (type) Output Shape Param #
input_1 (InputLayer) (None, 43) 0
плотный_1 (Плотный) (Нет, 256) 11264
Плотный_2 (Плотный) (Нет, 128) 32896
Плотный_3 (Плотный) (Нет, 959) 123711
Всего параметров: 167 871 Обучаемые параметры: 167 871 Необучаемые параметры: 0 ... 959/959 [================= =============] - 0 с 69 мкс / шаг - потеря: 5,9462 - точность: 0,0010 Эпоха 41/50 959/959 [=============== ===============] - 0 с 66 мкс / шаг - потеря: 5,9270 - точность: 0,0010 эпоха 42/50 959/959 [============= =================] - 0 с 68 мкс / шаг - потеря: 5,9081 - точность: 0,0010 Эпоха 43/50 959/959 [=========== ===================] - 0 с 68 мкс / шаг - потеря: 5,8894 - точность: 0,0010 эпоха 44/50 959/959 [========= =====================] - 0 с 68 мкс / шаг - потеря: 5,8709 - точность: 0,0010 эпоха 45/50 959/959 [======= =======================] - 0 с 68 мкс / шаг - потеря: 5,8526 - точность: 0,0010 эпоха 4 6/50 959/959 [==============================] - 0 с 67 мкс / шаг - потеря: 5,8346 - точность: 0,0010 эпохи 47/50 959/959 [==============================] - 0 с 64 мкс / шаг - потеря: 5,8168 - точность: 0,0010 Эпоха 48/50 959/959 [==============================] - 0 с 70 мкс / шаг - потеря: 5,7992 - точность: 0,0010 эпохи 49/50 959/959 [==============================] - 0 с 63 мкс / шаг - потеря: 5,7818 - точность: 0,0010 Эпоха 50/50 959/959 [==============================] - 0s 64us / шаг - потеря: 5,7646 - точность: 0,0010 затраченное время: 3,9185 секунды. 240/240 [==============================] - 0 с 154 мкс / потеря шага при тестировании: 595,13%, точность 0,00% затраченное время: 3,9664 секунды