Nous pouvons utiliser la fonction tf.GradientTape () dans la structure with pour réaliser l'opération de dérivation d'une certaine fonction aux paramètres spécifiés.
Avec la fonction variable qui vient d'être mentionnée, nous pouvons réaliser l'opération de dérivation de la perte de fonction de perte au paramètre w
import tensorflow as tf
with tf.GradientTape() as tape:
w = tf.Variable(tf.constant(3.0))
loss = tf.pow(w, 2)
grad = tape.gradient(loss, w)
print(grad)
Dans cet exemple, la valeur initiale de w est 3,0, la fonction de perte est le carré de w, la dérivée de la fonction de perte de w est 2w et la valeur initiale w = 3,0 est introduite dans le résultat est 6,0
énumération signifie énumération, il peut être énuméré Out chaque élément, et correspondre au numéro d'index correspondant devant l'élément, combiné en un élément d'index, souvent utilisé dans une boucle for
seq = ['one', 'two', 'three']
for i, element in enumerate(seq):
print(i, element)
Dans cet exemple, énumérer est le nom de la liste entre parenthèses, i accepte le numéro d'index et l'élément accepte l'élément. Le
numéro d'index 0 correspond à la chaîne un Le
numéro d'index 1 correspond à la chaîne deux Le
numéro d'index 2 correspond à la chaîne trois
Dans le problème de classification, nous utilisons souvent des codes uniques pour représenter les étiquettes . Par exemple, dans la classification précédente de l'iris, si l'étiquette est 1, cela signifie que le résultat de la classification est un iris panaché et qu'il est de 0 1 0 sous la forme des codes one-hot. Cela peut représenter la probabilité de chaque catégorie, c'est-à-dire que 0% peut être 0 iris Setaria, 100% peut être 0 iris panaché, 0% peut être 2 iris Virginie
TensorFlow fournit la fonction one_hot, vous pouvez changer Les données à convertir sont directement converti en forme de code unique
import tensorflow as tf
classes = 3
labels = tf.constant([1, 0, 2]) # 输入的元素值最小为0,最大为2
output = tf.one_hot(labels, depth=classes)
print("result of labels1:", output)
print("\n")
Par exemple, il y a 3 catégories, un ensemble d'étiquettes est 1, 0 et 2, pour les convertir en codes one-hot, utilisez la fonction tf.one_hot, la première variable écrit les étiquettes de données à convertir, et la seconde variable écrit plusieurs catégories. Attribuez une valeur de 3 catégories et convertissez l'étiquette 1 étiquette 0 étiquette 2 en un code unique, le résultat est 010, 100, 001
Pour le problème de classification, le réseau neuronal achève la propagation directe et calcule la probabilité de chaque type de 1,01, 2,01, -0,66. Ces nombres ne peuvent être comparés à l'étiquette de code unique qu'une fois qu'ils sont conformes à la distribution de probabilité.
Nous utilisons donc cette formule pour rendre la sortie conforme à la distribution de probabilité.
0,256 signifie que la probabilité d'un iris de classe 0 est de 25,6%.
0,695 signifie que la probabilité d'iris de classe 1 est de 69,5%.
0,048 signifie 2 La probabilité de type iris est de 4,8%
. La fonction softmax est utilisée dans TensorFlow. Le calcul de cette formule
peut faire les n sorties y0, y1 ..., yn-1 de n catégories sont conformes à la distribution de probabilité, c'est-à-dire que chaque valeur de sortie devient 0 à des valeurs de probabilité comprises entre 1, et la somme de ces probabilités est 1
import tensorflow as tf
y = tf.constant([1.01, 2.01, -0.66])
y_pro = tf.nn.softmax(y)
print("After softmax, y_pro is:", y_pro) # y_pro 符合概率分布
print("The sum of y_pro:", tf.reduce_sum(y_pro)) # 通过softmax后,所有概率加起来和为1
Dans l'exemple que nous donnons, les résultats de propagation directe du réseau neuronal 1.01, 2.01, -0.66 forment un tenseur y et l'envoient à la fonction softmax. Le résultat est ces valeurs qui sont conformes à la distribution de probabilité. La fonction
assign_sub () est souvent utilisé pour la mise à jour automatique des paramètres, en attente Le paramètre d'auto-mise à jour w doit d'abord être désigné comme une formation pouvant être mise à jour, c'est-à-dire un type de variable, avant que la mise à jour automatique puisse être implémentée. Par
exemple, dans cet exemple, w doit d'abord être défini comme un type de variable et la valeur initiale est 4. Pour décrémenter w, vous pouvez utiliser la fonction w.assign_sub (). La valeur entre () est 1, ce qui réalise l'opération de w = w-1.
Résultat de l' opération :
La valeur initiale 4 de w est décrémentée de 1, et w est mis à jour. Pour 3,
tf.argmax () peut renvoyer le numéro d'index de la valeur maximale de l'axe d'opération spécifié. Par
exemple, pour ce tenseur bidimensionnel argmax, axis = 0, le numéro d'index de la valeur maximale verticale est renvoyé , respectivement,
1 2 5 8 et la valeur maximale est 8., Son numéro d'index est 3
2 3 4 7, la valeur maximale est 7, son numéro d'index est 3
3 4 3 2, la valeur maximale est 4, son numéro d'index est 1
argmax, axis = 1, il renvoie le numéro d'index horizontal maximum, respectivement
1 2 3, la valeur maximum est 3, son numéro d'index est 2
2 3 4, la valeur maximum est 4, son numéro d'index est 2
5 4 3 , la valeur maximale est 5 et son numéro d'index est 0
8 7 2, la valeur maximale est 8 et son numéro d'index est 0