2017-03-05 3 views
0

Ich verwende Tensorflow für eine kurze Zeit. Hier ist mein Problem: ich AlexNet Gewichte laden Feinabstimmung auf, es zu tun, also gebe ich Charge von Größe 50 So i definiert:Form des Platzhalters in Tensorflow

# Graph input 
x = tf.placeholder(tf.float32, [50, 227, 227, 3]) 
y = tf.placeholder(tf.float32, [None, 40]) 

gebe ich einen Stapel von 50 Bildern und wollen 40 Ausgabe erhalten Klassen.

Dann definierte ich mein Modell

class Model: 
@staticmethod 
def alexnet(_X, _dropout): 
    # Layer 1 (conv-relu-pool-lrn) 
    conv1 = conv(_X, 11, 11, 96, 4, 4, padding='VALID', name='conv1') 
    conv1 = max_pool(conv1, 3, 3, 2, 2, padding='VALID', name='pool1') 
    norm1 = lrn(conv1, 2, 2e-05, 0.75, name='norm1') 
    # Layer 2 (conv-relu-pool-lrn) 
    conv2 = conv(norm1, 5, 5, 256, 1, 1, group=2, name='conv2') 
    conv2 = max_pool(conv2, 3, 3, 2, 2, padding='VALID', name='pool2') 
    norm2 = lrn(conv2, 2, 2e-05, 0.75, name='norm2') 
    # Layer 3 (conv-relu) 
    conv3 = conv(norm2, 3, 3, 384, 1, 1, name='conv3') 
    # Layer 4 (conv-relu) 
    conv4 = conv(conv3, 3, 3, 384, 1, 1, group=2, name='conv4') 
    # Layer 5 (conv-relu-pool) 
    conv5 = conv(conv4, 3, 3, 256, 1, 1, group=2, name='conv5') 
    pool5 = max_pool(conv5, 3, 3, 2, 2, padding='VALID', name='pool5') 
    # Layer 6 (fc-relu-drop) 
    fc6 = tf.reshape(pool5, [-1, 6*6*256]) 
    fc6 = fc(fc6, 6*6*256, 4096, name='fc6') 
    fc6 = dropout(fc6, _dropout) 
    # Layer 7 (fc-relu-drop) 
    fc7 = fc(fc6, 4096, 4096, name='fc7') 
    fc7 = dropout(fc7, _dropout) 
    # Layer 8 (fc-prob) 
    fc8 = fc(fc7, 4096, 40, relu=False, name='fc8') 
    return fc8 # fc8 and fc7 (for transfer-learning) 

und schafft es

keep_var = tf.placeholder(tf.float32) 

# Model 
pred = Model.alexnet(x, keep_var) 

ich die Ausbildung tun kann, es funktioniert gut, aber am Ende, ich will nur ein Bild geben, aber Der x-Platzhalter und der y-Platzhalter sind für 50 Bilder definiert, sodass ein Fehler auftritt. Hier ist mein Code nach dem Training nur ein Bild zu geben:

x_test = tf.placeholder(tf.float32, [1, 227, 227, 3]) 
    y_test = tf.placeholder(tf.float32, [None, 40]) 
    img = loaded_img_train[0][:][:][:] # Only one image 
    label = loaded_lab_train[0][:] # Only one label 
    prediction = sess.run(pred, feed_dict={x_test: [img],  y_test: [label], keep_var: 1.}) 

Und es stellt sich mir diese Fehlermeldung:

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'Placeholder' with dtype float and shape [50,227,227,3] 
[[Node: Placeholder = Placeholder[dtype=DT_FLOAT, shape=[50,227,227,3], _device="/job:localhost/replica:0/task:0/cpu:0"]()]] 

ich nicht heraus kann, wie die Eingangsgröße zu füttern ich will.

Meine Übung wird von Blumenerkennung mit cnn

Vielen Dank für Ihre Hilfe direkt inspiriert! Guillaume

Antwort

1

Anstatt die erste Dimension der Form auf eine feste Größe zu setzen, können Sie für die erste Dimension der Form eine variable Größe verwenden, indem Sie None statt einer Zahl festlegen. Tensorflow kann die Losgröße anhand der Eingabegröße und der festen Größen der anderen Abmessungen der Form berechnen.

Für den Platzhalter y, Sie haben das richtig gemacht:

y = tf.placeholder(tf.float32, [None, 40]) 

Für den Platzhalter x, Sie setzen müssen:

x = tf.placeholder(tf.float32, [None, 227, 227, 3]) 
+0

ich es tat, aber ich habe einen anderen Fehler, wenn ich meine definiert Faltungsschicht: 'bias = tf.reshape (tf.nn.bias_add (conv, verzerrt), conv.get_shape(). as_list())' Es wird gesagt: 'TypeError: Erwartete binäre oder Unicode-Zeichenfolge, bekam keine ' Es ist in der conv.get_shap e() dass ich ein Problem habe. – guillaumegg10

+0

Conv ist definiert als: 'convolve = lambda i, k: tf.nn.conv2d ( i, k, [1, S_H, s_w, 1], padding = padding) mit tf.variable_scope (name) als scope: # Erzeuge tf-Variablen für die Gewichte und Verzerrungen der Conv-Schicht kernel = make_var ('Gewichte', Form = [k_h, k_w, int (c_i)/Gruppe, c_o]) biases = make_var ('biases' , [c_o]) wenn group == 1: conv = falten (Eingabe, Kernel) ' – guillaumegg10

+0

Ich bin ein bisschen verloren, ich weiß! Ich muss üben ! – guillaumegg10

Verwandte Themen