0
votes

Devrais-je utiliser softmax ou tf.nn.sigmoid_cross_tropy_with_logits pour générer une classification multi-class avec une probabilité par classe?

Je lis sur NN et je voudrais également générer mon premier NN en même temps (pour compléter ma lecture).

J'ai une donnée de données comme ceci: p> xxx pré>

colonnes: p>

  1. dnaseq -> une chaîne d'une séquence d'ADN (c'est-à-dire "les séquences") li>
  2. Sample1Name -> Valeur catégorique Expliquer une propriété chimique de la solution que DNaseq est in. li>
  3. Sample2Name -> Valeur catégorique Expliquer une propriété chimique de la solution que DNaseq est in. li>
  4. CONCOFDNULAMUMAMPLE -> Une valeur quantitative de la concentration de l'ADN dans Sample2Sname. Li>
  5. DnaseqfoundinProcesscat -> C'est l'étiquette que je veux prédire. C'est une valeur catégorique avec quatre catégories (Found_in_0 -> Found_in_3). C'est la sortie de l'endroit où j'ai fait trois tests sur chaque DNaseq pour voir si je manipule la solution d'origine (qui est le Found_in_0), est le DNaseq toujours présent. Li> ol> BlockQuote>

    Ma question: Pour un ensemble invisible de séquences, je souhaite que l'ensemble de sorties d'étiquettes soit une probabilité multi-classes de 'Found_in_1', 'Found_in_2', 'Found_in_3'. P>

    I.e. Si l'exemple ci-dessus était la sortie de mon ensemble de test, ma sortie ressemblerait parfaitement à ceci: p> xxx pré>

    Il y a quelques notes: p>

    1. Il est possible qu'en raison des processus que je fais, que certaines séquences ne peuvent pas être dans la solution d'origine (Found_in_0), mais puisque parce que les morceaux d'ADN peuvent rester ensemble, ils peuvent ensuite être dans les autres classes (Found_in_1, Found_in_2, Found_IN_3) P> LI>

    2. Je ne suis intéressé que par la sortie de la classe Found_in_1, Found_2 et Found_IN_3 (I.E. Je veux une probabilité de trois classes à la fin, pas une probabilité de quatre classes avec Found_in_0). P> LI>

    3. Je suis capable de générer d'autres fonctionnalités des ADN SEQS, ceci est juste un exemple. p> li>

    4. Je peux voir de mes données, que mon ensemble de données est déséquilibré, la quantité de données dans Found_in_3 est significativement inférieure à celle des autres (mes données de formation complètes sont d'environ 80 000 rangées; mais seulement environ 10 000 de ces lignes sont Found_in_3; les autres sont tous Found_in_0, Found_in_1 ou Found_in_2). P> LI> ol>

      Ce que j'essaie de travailler est l'algorithme, pour un point spécifique en particulier. Mon idée était la suivante: p>

      1.fin dans les données. P>

      df = pd.read_csv ('"données") code> p>

      2 .Split les données définies dans TRAIN et TEST P>

      from keras.models import Sequential
      from keras.layers import Dense
      model = Sequential()
      model.add(Dense(8,input_dim=4,activation='relu'))
      model.add(Dense(8,input_dim=4,activation='relu'))
      model.add(Dense(3, activation='softmax'))
      model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
      model.summary()
      model.fit(x_train,y_train, epochs=150,verbose=0)
      


0 commentaires

3 Réponses :


0
votes

Il y a une différence fondamentale entre softmax et sigmoid_cross_tropy_with_logits . Le premier s'applique fonction Softmax . En substance, vous fournissez des scores non formés (logits) d'entrée et des émissions de sortie des valeurs normalisées pouvant être interprétées comme probabilités.

D'autre part, sigmoid_cross_tropy_with_logits vous obtiendra d'abord un sigmoïde, puis calculer une entropie croisée (contre Labales , son premier argument!) de manière numérique.).

Une explication plus détaillée peut être trouvée par exemple ici . Je suppose que ce que vous êtes après est softmax .


0 commentaires

0
votes

règle de base: supposant que vous disposez de plusieurs classes / étiquettes, chaque échantillon appartient à une classe exactement (exactement une étiquette)?

oui: multiclasse. Utilisez Softmax pour l'activation et l'entropie [SParse] Cross Enstropie de la perte.

NO , l'objet peut appartenir à plusieurs classes simultanément: Multilabel. Utilisez SIGMOID pour l'activation et l'entropie transversale binaire pour la perte.

Dans la description, je ne suis pas certain de ce qui est le cas dans votre scénario.


0 commentaires

0
votes

Si chaque entrée peut appartenir à plusieurs étiquettes / classe, vous devez utiliser tf.nn.sigmoid_cross_tropy_with_logits . Si vous utilisez sigmoid sur la sortie du modèle, vous obtiendrez 3 probabilités pour 3 étiquettes. Vous pouvez lire plus de détails ici .


0 commentaires