2017-07-11 3 views
0

Ich habe viele Anfänger Bücher von Tensorflow gelesen und diesen Code gemacht. Dies nimmt einfach N Dimension Daten und Ausgabe 1 Dimension.Hinzufügen versteckter Schichten zu ersten einfachen neuronalen Netzwerk

Es funktioniert gut charmant !!

Nun möchte ich versteckte Ebene hinzufügen, aber ich kann es nicht schaffen und einfache Tutorial oder Beispiele zu finden, um zu verstehen, wie versteckte Ebene hinzufügen.

Gibt es gute Praxis oder Ideen? oder "Hinzufügen von versteckten Ebene zu dieser Probe" ist richtig Ansatz, um weiter zu lernen ???

tf.set_random_seed(0) 
N = 10 

w = tf.Variable(tf.zeros([N,1])) 
b = tf.Variable(tf.zeros([1])) 

x = tf.placeholder(tf.float32,shape=[None,N]) 
t = tf.placeholder(tf.float32,shape=[None,1]) 
y = tf.nn.sigmoid(tf.matmul(x,w) + b) 

cross_entropy = - tf.reduce_sum(t * tf.log(y) + (1 -t) * tf.log(1 -y)) 
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(cross_entropy) 
correct_prediction = tf.equal(tf.to_float(tf.greater(y,0.5)),t) 


init = tf.global_variables_initializer() 
sess = tf.Session() 
sess.run(init) 

for epoch in range(2000): 
    sess.run(train_step,feed_dict={ 
     x: X, 
     t: Y 
    }) 

classified = correct_prediction.eval(session=sess,feed_dict={ 
    x:X, 
    t:Y 
    }) 

print(classified) 

prob = y.eval(session=sess ,feed_dict={ 
    x:X, 
    t:Y 
}) 
print(prob) 

print('w:',sess.run(w)) 
print('b:',sess.run(b)) 

Antwort

5

Ihre verborgenen Schicht wird zwischen den Eingangs- und Ausgangsschichten sein, so dass die eingangs verborgenen Schicht wird durch Gewichten der Größe und [input_size, hidden_size] hidden-Ausgangsschicht [hidden_size, output_size] durch Gewichte der Größe werden verbunden werden. Und es wird Aktivierungen auf jeder Ebene geben.

Der Code sollte wie folgt aussehen:

N = 10 
n_hidden = 20 
# dont initialise weights to zero but to a small number 
w_h = tf.Variable(tf.truncated_normal([N,n_hidden], stddev=0.001)) 
b_h = tf.Variable(tf.zeros([n_hidden])) 

w = tf.Variable(tf.truncated_normal([n_hidden,1], stddev=0.001)) 
b = tf.Variable(tf.zeros([1])) 

x = tf.placeholder(tf.float32,shape=[None,N]) 
t = tf.placeholder(tf.float32,shape=[None,1]) 

h = tf.nn.relu(tf.matmul(x, w_h) + b_h) 

y = tf.matmul(h, w) + b 

#remove sigmoid from last layer and use the stable implementation: 
cross_entropy = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=y, labels=t)) 
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(cross_entropy) 
correct_prediction = tf.equal(tf.to_float(tf.greater(y,0.5)),t) 
+0

Vielen Dank für Ihre klare Erklärung. Ich konnte verstehen. – whitebear

3

Warum nicht tf.layers verwenden?

N = 10 
n_hidden = 20 

x = tf.placeholder(tf.float32,shape=[None,N]) 
t = tf.placeholder(tf.float32,shape=[None,1]) 

layer1 = tf.layers.dense(x,n_hidden,tf.nn.relu) 
y = tf.layers.dense(layer1,1) 

mehr Schichten Zugabe ändert sich die oben zu sagen:

N = 10 
n_hidden_1 = 20 
n_hidden_2 = 25 

x = tf.placeholder(tf.float32,shape=[None,N]) 
t = tf.placeholder(tf.float32,shape=[None,1]) 

layer1 = tf.layers.dense(x,n_hidden_1,tf.nn.relu) 
layer2 = tf.layers.dense(layer1,n_hidden_2,tf.nn.relu) 
y = tf.layers.dense(layer1,1) 
+0

Ich werde über tf.layer suchen und versuchen. vielen Dank. – whitebear

Verwandte Themen