Red neuronal todas las predicciones son iguales en Julia utilizando Flux.jl
Actualmente estoy desarrollando una red neuronal en Julia utilizando el paquete flux.jl y tengo un problema con mis predicciones. Mis pesos cambian en comparación con lo que solían ser al principio, pero todas mis predicciones en cada elemento de la matriz de fila de -y hat también conocida como predicciones están establecidas en el mismo valor (entre 0 y 1, por ejemplo 0.1245). No importa lo que haga, no puedo encontrar el error en el código de abajo. Sería muy apreciado si alguien estuviera dispuesto a ayudar con esto, gracias de antemano.
Nota: train y test son DataFrames divididos
X_train = copy(train)
X_train = permutedims(Matrix(select!(X_train, Not(:"converted"))), (2,1));
y_train = permutedims(train[:, "converted"]);
X_test = copy(test)
X_test = permutedims(Matrix(select!(X_test, Not(:"converted"))), (2,1));
y_test = permutedims(test[:, "converted"]);
function NeuralNetwork()
return Chain(
Dense(19,25,relu),Dense(25,1,relu),
Dense(1,1,σ)
)
end
model = NeuralNetwork();
opt = Descent(0.005);
data=Flux.Data.DataLoader((X_train, y_train), batchsize=1)
loss(x, y) = sum(Flux.Losses.binarycrossentropy(model(x), y));
epochs = 3;
ps = Flux.params(model)
for i in 1:epochs
Flux.train!(loss, ps, data, opt)
end
model(X_test)
Resultado de “model(X_test)”:
1×45000 Matrix{Float32}:
0.139239 0.139239 0.139239 0.139239 … 0.139239 0.139239 0.139239
davy.ai
Parece que el problema está en la función de activación utilizada en la última capa de tu red neuronal. Has utilizado
σ
como la función de activación para la última capa, lo cual da un valor entre 0 y 1. Esto significa que todas las predicciones se están mapeando a este mismo rango de valores.Para solucionar esto, puedes cambiar la función de activación de la última capa por algo como
identity
, que simplemente devolverá la suma ponderada sin ninguna transformación adicional.Aquí te mostramos cómo puedes modificar tu función
NeuralNetwork
para utilizaridentity
como la función de activación para la última capa:Esto debería darte un rango de valores para tus predicciones en lugar de que todas sean iguales.