Le Flux.jl modèle toujours sorties 1.0 après l'ajout de fonction d'activation Sigmoïde

0

La question

Mon problème était que je voulais que mon modèle à sortie 0-1 afin que je puisse la carte de retour à mon catégorique images des étiquettes (de Flux.jl restreindre les variables entre 0 et 1). J'ai donc décidé d'ajouter une fonction d'activation sigmoïde comme suit:

σ = sigmoid

model = Chain(
  resnet[1:end-2],
  Dense(2048, 1000),  
  Dense(1000, 256),
  Dense(256, 2, σ),        # we get 2048 features out, and we have 2 classes
);

Cependant, maintenant, mon modèle n'sorties 1.0. Toutes les idées pour lesquelles ou si je suis à l'aide de la fonction d'activation de mal?

flux.jl julia
2021-11-22 20:59:14
1

La meilleure réponse

1

Envisagez d'utiliser une fonction d'activation pour votre couches cachées comme linéaire multiple couches (couches Denses sans une non-linéaire de la fonction d'activation) sont équivalentes à une seule linéaire de la couche. Si vous êtes à l'aide de catégories qui sont exclusifs (chien ou un chat, mais pas les deux) qui couvrent l'ensemble de vos affaires (il sera toujours un chien ou un chat et de ne jamais, par exemple, une autruche), alors les probabilités doivent somme pour l'un et un softmax devrait être plus approprié pour la dernière fonction. L' softmax la fonction est généralement utilisée avec la crossentropy la perte de fonction.

model = Chain(
  resnet[1:end-2],
  Dense(2048, 1000, σ),  
  Dense(1000, 256, σ),
  Dense(256, 2),
  softmax        
);

Pour une meilleure stabilité numérique et de la précision, il est recommandé de remplacer crossentropy par et logitcrossentropy respectivement (dans ce cas, softmax n'est pas nécessaire).

2021-11-23 08:23:14

Cela donne une erreur: MethodError: no method matching similar(::Float32, ::Type{Float32}) Closest candidates are: similar(!Matched::Union{LinearAlgebra.Adjoint{T, var"#s814"}, LinearAlgebra.Transpose{T, var"#s814"}} where {T, var"#s814"<:(AbstractVector{T} where T)}, ::Type{T}) where T at /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.6/LinearAlgebra/src/adjtrans.jl
logankilpatrick

@logankilpatrick, en effet, j'ai mis à jour ma réponse en mettant softmax après la dernière couche Dense. Ça fonctionne maintenant?
Alex338207

Il semble restreindre les valeurs entre 0 et 1, mais les valeurs de sortie sont toujours les mêmes pour les différentes images
logankilpatrick

@logankilpatrick Êtes-vous sûr que le ResNet modèle est en fait pré-formés? Il est mentionné comme pas pré-formés dans les docs (fluxml.ai/Metalhead.jl/dev/README.html) Si non, vous avez besoin de former tous les paramètres du modèle et peut-être pour plus que juste 2 époques. Comme un test, vous pouvez également exécuter le plein ResNet modèle avec vos données de tests.
Alex338207

C'est probablement la question, permettez-moi d'essayer de la formation de toutes les couches.
logankilpatrick

J'ai mis à jour le modèle de re-former tous les calques, mais le résultat semble être le même
logankilpatrick

Vous trouverez le code ici: github.com/logankilpatrick/DeepLearningWithJulia/blob/main/src/... peut-être que je fais quelque chose de mal?
logankilpatrick

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................