Récemment, je travaille avec Tensorflow. J'explorais comment implémenter Perceptron multicouche dans Tensorflow.Comment créer un nombre variable de couches dans MLP
Je suis passé par beaucoup de tutoriel en ligne. la plupart d'entre eux utilisent une ou deux couches cachées. Un exemple simple est tiré de here
def forwardprop(X, w_1, w_2):
"""
Forward-propagation.
IMPORTANT: yhat is not softmax since TensorFlow's
softmax_cross_entropy_with_logits() does that internally.
"""
h = tf.nn.sigmoid(tf.matmul(X, w_1)) # The \sigma function
yhat = tf.matmul(h, w_2) # The \varphi function
return yhat
X = tf.placeholder("float", shape=[None, x_size])
y = tf.placeholder("float", shape=[None, y_size])
# Weight initializations
w_1 = init_weights((x_size, h_size))
w_2 = init_weights((h_size, y_size))
# Forward propagation
out = forwardprop(X, w_1, w_2)
Dans ce code, il y a une couche cachée. Maintenant, je me demande si je voulais construire un nombre variable de réseaux neuronaux entièrement connectés en couches. Supposons une liste h_archi = [100 150 100 50] où chacune de la valeur représente un nombre de neurones dans la première couche (dans ce cas, le nombre total de couche est 4). Donc, pour nombre variable de mise en œuvre de la couche, je le code laid codé suivant,
emb_vec = tf.Variable(tf.random_normal([vocabulary_size, EMBEDDING_DIM]), name="emb_vec")
tot_layer = len(h_archi)
op = np.zeros(tot_layer+1)
hid_rep = np.zeros(tot_layer+1)
bias = np.zeros(tot_layer+1)
op[0] = tf.matmul(x, emb_vec)
for idx,tot_neu in enumerate(h_archi):
assert(tot_neu > 0)
layer_no = idx+1
r,c = op[layer_no-1].get_shape()
hid_rep[layer_no] = tf.Variable(tf.random_normal([c,tot_neu]),name="hid_{0}_{1}".format(layer_no-1,layer_no))
bias[layer_no] = tf.Variable(tf.random_normal([tot_neu]), name="bias_{0}".format(layer_no))
op[layer_no] = tf.add(tf.matmul(op[layer_no-1],hid_rep[layer_no]),bias[layer_no])
r,c = op[tot_layer].get_shape()
last_layer = tf.Variable(tf.random_normal([c,output_size]),name="hid_{0}_{1}".format(tot_layer,"last_layer"))
bias_last = tf.Variable(tf.random_normal([output_size]), name="bias_last")
output = tf.add(tf.matmul(op[tot_layer],last_layer))
prediction = tf.nn.softmax(output)
Ce code est complètement faux que tensorflow ne prend pas en charge l'opération d'affectation. Alors, quelle pourrait être la bonne façon de concevoir une telle chose.
Merci beaucoup pour votre aide. –