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
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
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
Ich bin ein bisschen verloren, ich weiß! Ich muss üben ! – guillaumegg10