Bonjour,
Depuis peu, je me suis mis à faire des réseaux neuronaux (assez basique) et afin d'en apprendre la structure, j'ai commencé par des exemples simples, comme additionner deux nombres. Ça fonctionne assez bien sauf que mon code:
me donne des prédictions assez fausses, je m'explique:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 from keras.layers import Activation,Input from keras.layers.core import Dense from keras.optimizers import Adam from keras.models import Model from keras.metrics import categorical_crossentropy from random import randint import numpy as np entree=[] Lsortie=[[],[]] for i in range(200000): liste=[] for j in range(3): b=randint(0,4) liste.append(b) Lsortie[0].append(liste[0]+liste[1]) Lsortie[1].append(liste[1]+liste[2]) entree.append(np.array(liste)) entree=np.array(entree) Lsortie[0]=np.array(Lsortie[0]) Lsortie[1]=np.array(Lsortie[1]) #Lsortie=np.array(Lsortie) inputs=Input(shape=(3,)) x=Dense(50,activation='softplus')(inputs) x=Dense(200,activation='softplus')(x) y11=Dense(200,activation='softplus')(x) y1=Dense(9,activation='sigmoid')(y11) y21=Dense(200,activation='softplus')(x) y2=Dense(9,activation='sigmoid')(y21) model=Model(inputs=inputs,outputs=[y1,y2]) model.compile(Adam(lr=0.0001),loss='sparse_categorical_crossentropy',metrics=['accuracy']) model.fit(entree,Lsortie,batch_size=500,epochs=50,shuffle=True,verbose=2) test=np.array([np.array([2,3,4]),np.array([2,4,1])]) prediction=model.predict(test,batch_size=1,verbose=2) print(prediction)
Je rentre un triplet [x,y,z] avec (x,y,z) entre 1 et 4 et je demande une solution de la forme [x+y,y+z]
Dans le premier cas [2,3,4], il me renvoi array([[0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 3.6383644e-23, 6.1241401e-08, 9.0752965e-01, 7.5694873e-09, 3.3126938e-37,0.0000000e+00],
[0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 9.5438167e-38,5.9325401e-23, 1.4042563e-08, 5.2641749e-01, 7.5602594e-11, 2.0157268e-25]] ,dtype=float32)
Ce qui est quasiment le résultat sauf que 3+4 ne fais pas 6 mais dans le deuxième cas [2,4,1], il me renvoi:
array([[0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 0.0000000e+00,9.4647474e-37, 1.5343864e-16, 1.0000000e+00, 1.0000000e+00,3.1688566e-07],
[0.0000000e+00, 0.0000000e+00, 0.0000000e+00, 9.4848651e-25, 2.6400260e-08, 8.1780058e-01, 1.8243768e-11, 1.1869961e-28, 0.0000000e+00]], dtype=float32)]
Or si 2+4=6 mais il me renvoi deux endroit avec 1.
Voilà ma question : comment changer ce résultat incompréhensible?
Partager