0

Ich weiß, dass das Folgende eine bereits beantwortete Frage ist, aber obwohl ich alle vorgeschlagenen Lösungen ausprobierte und versuchte, löste keines von ihnen mein Problem. Ich machte dieses Netz für das Training über MNIST-Daten. Am Anfang war es tiefer, aber um mich auf das Problem zu konzentrieren, habe ich es vereinfacht.Wie verwende ich ein vortrainiertes Modell mit Tensorflow?

mnist = mnist_data.read_data_sets('MNIST_data', one_hot=True) 

# train the net 
def train(): 
    for i in range(1000): 
     batch_xs, batch_ys = mnist.train.next_batch(100) 
     sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys}) 
     print("accuracy", sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})) 
     if i%100==0: 
      save_path = saver.save(sess, "./tmp/model.ckpt", global_step = i, write_meta_graph=True)  
      print("Model saved in file: %s" % save_path) 

# evaluate the net 
def test(image, label): 
    true_value = tf.argmax(label, 1) 
    prediction = tf.argmax(y, 1) 
    print("true value:", sess.run(true_value)) 
    print("predictions", sess.run(prediction, feed_dict={x:image})) 

sess = tf.InteractiveSession() 

x = tf.placeholder("float", shape=[None, 784]) 
W = tf.Variable(tf.zeros([784,10]), name = "W1") 
b = tf.Variable(tf.zeros([10]), name = "B1") 
y = tf.nn.softmax(tf.matmul(x,W) + b, name ="Y") 
y_ = tf.placeholder("float", shape=[None, 10]) 
cross_entropy = -tf.reduce_sum(y_*tf.log(y)) 
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy) 
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1)) 
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) 

saver = tf.train.Saver() 
model_to_restore="./tmp/model.ckpt-100.meta" 
if os.path.isfile(model_to_restore): 
    #what i have to do here?????# 
else: 
#this part works!# 
    print("Model does not exist: training") 
    train() 

Vielen Dank für die Antworten!

Grüße,

Silvio

UPDATE

  • habe ich versucht, beide

    saver.restore(sess, model_to_restore) 
    

    und

    saver = tf.train.import_meta_graph(model_to_restore) 
    saver.restore(sess, model_to_restore) 
    

    aber in beiden Fällen i vom Terminal dieser Fehler hatte:

    DataLossError (see above for traceback): Unable to open table  file ./tmp/model.ckpt.meta: Data loss: not an sstable (bad magic number): perhaps your file is in a different file format and you need to use a different restore operator? 
    [[Node: save/RestoreV2 = RestoreV2[dtypes=[DT_FLOAT], _device="/job:localhost/replica:0/task:0/cpu:0"](_recv_save/Const_0, save/RestoreV2/tensor_names, save/RestoreV2/shape_and_slices)]] 
    

Antwort

0

Ich denke, Ihre Position zu dem Modell falsch sein könnte und ich würde Ihnen raten, den folgenden Workflow einen Versuch zu geben.

Da die gespeicherten Modelle umfassen mehrere Dateien, die ich in der Regel in einen Ordner nach dem Training sparen:

modelPath = "myMNIST/model" 
saved_path = saver.save(sess, os.path.join(modelPath, "model.ckpt")) 
print("Model saved in file: ", saved_path) 

Dies wird Ihnen auch sagen, die genaue Stelle, wo sie gespeichert wurde.

Dann kann ich meinen Prädiktor innerhalb der gespeicherten Position (cd in myMNIST) starten und das Modell wieder herstellen, indem:

ckpt = tf.train.get_checkpoint_state("./model") 
if ckpt and ckpt.model_checkpoint_path: 
    print("Restored Model") 
    saver.restore(sess, ckpt.model_checkpoint_path) 
else: 
    print("Could not restore model!") 
+0

Tat !! Das war der Fehler !! Vielen Dank für Ihre freundliche Antwort! – SilvioBarra

Verwandte Themen