Olá. Meu Perceptron está com baixíssima performance. Acredito que esteja sofrendo de overfiting. Gostaria que analisassem meu código para eu entender onde eu errei.
QUANTIDADE_EPOCAS = 1000
perdas = []
taxas_acertos = []
otimizador_treino = tf.optimizers.SGD(learning_rate= 0.01)
tf.random.set_seed(31)
quantidade_features = X_treino.shape[1]
pesos = tf.Variable(tf.random.normal([quantidade_features, 1]), name= 'pesos')
vies = tf.Variable(tf.random.normal([1]), name= 'vies')
# obtendo o custo
for epoca in range(QUANTIDADE_EPOCAS):
with tf.GradientTape() as tape:
probabilidade = tf.sigmoid(neuronio(X_treino))
custo = calculadora_perda(y_treino, probabilidade)
gradientes = tape.gradient(custo, [pesos, vies])
otimizador_treino.apply_gradients(zip(gradientes, [pesos, vies]))
# calculando a Taxa de acerto nos dados de teste
probabilidade_teste = tf.sigmoid(neuronio(X_teste))
acertos = np.mean(y_teste.numpy() == ((probabilidade_teste.numpy() > 0.5)*1))
taxas_acertos.append(acertos)
perdas.append(custo.numpy())
if (epoca + 1) % 100 == 0:
print(f"Época: {epoca+1}, Custo: {custo.numpy()}, Taxa de acerto: {acertos}")
SAÍDA Época: 100, Custo: 0.7902313470840454, Taxa de acerto: 0.4262295081967213 Época: 200, Custo: 0.13465942442417145, Taxa de acerto: 0.4426229508196721 Época: 300, Custo: -0.3076125979423523, Taxa de acerto: 0.45901639344262296 Época: 400, Custo: -0.6732703447341919, Taxa de acerto: 0.4098360655737705 Época: 500, Custo: -1.0038869380950928, Taxa de acerto: 0.39344262295081966 Época: 600, Custo: -1.3114114999771118, Taxa de acerto: 0.3770491803278688 Época: 700, Custo: -1.5990430116653442, Taxa de acerto: 0.3770491803278688 Época: 800, Custo: -1.870243787765503, Taxa de acerto: 0.3770491803278688 Época: 900, Custo: -2.1292061805725098, Taxa de acerto: 0.36065573770491804 Época: 1000, Custo: -2.379087448120117, Taxa de acerto: 0.36065573770491804