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:
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)
me donne des prédictions assez fausses, je m'explique:
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?