2017-02-10 27 views
6

Tôi không thể thực hiện để làm cho bản tóm tắt hoạt động với API ước tính của Tensorflow.API ước lượng dòng chảy API: Tóm tắt

Lớp Ước lượng rất hữu ích vì nhiều lý do: Tôi đã triển khai các lớp của riêng mình nhưng thực sự tương tự nhưng tôi đang cố gắng chuyển sang lớp này.

Đây là mẫu mã:

import tensorflow as tf 
import tensorflow.contrib.layers as layers 
import tensorflow.contrib.learn as learn 
import numpy as np 

# To reproduce the error: docker run --rm -w /algo -v $(pwd):/algo tensorflow/tensorflow bash -c "python sample.py" 

def model_fn(x, y, mode): 
    logits = layers.fully_connected(x, 12, scope="dense-1") 
    logits = layers.fully_connected(logits, 56, scope="dense-2") 
    logits = layers.fully_connected(logits, 4, scope="dense-3") 

    loss = tf.reduce_mean(tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y), name="xentropy") 

    return {"predictions":logits}, loss, tf.train.AdamOptimizer(0.001).minimize(loss) 


def input_fun(): 
    """ To be completed for a 4 classes classification problem """ 

    feature = tf.constant(np.random.rand(100,10)) 
    labels = tf.constant(np.random.random_integers(0,3, size=(100,))) 

    return feature, labels 

estimator = learn.Estimator(model_fn=model_fn,) 

trainingConfig = tf.contrib.learn.RunConfig(save_checkpoints_secs=60) 

estimator = learn.Estimator(model_fn=model_fn, model_dir="./tmp", config=trainingConfig) 

# Works 
estimator.fit(input_fn=input_fun, steps=2) 

# The following code does not work 

# Can't initialize saver 

# saver = tf.train.Saver(max_to_keep=10) # Error: No variables to save 

# The following fails because I am missing a saver... :(

hooks=[ 
     tf.train.LoggingTensorHook(["xentropy"], every_n_iter=100), 
     tf.train.CheckpointSaverHook("./tmp", save_steps=1000, checkpoint_basename='model.ckpt'), 
     tf.train.StepCounterHook(every_n_steps=100, output_dir="./tmp"), 
     tf.train.SummarySaverHook(save_steps=100, output_dir="./tmp"), 
] 

estimator.fit(input_fn=input_fun, steps=2, monitors=hooks) 

Như bạn thấy, tôi có thể tạo ra một Công cụ Ước tính và sử dụng nó nhưng tôi có thể đạt được để thêm móc để quá trình phù hợp.

Các móc khai thác gỗ làm việc tốt nhưng những người khác đòi hỏi cả tensorssaver mà tôi không thể cung cấp.

Các tensors được định nghĩa trong mô hình chức năng, vì vậy tôi không thể vượt qua họ đến SummaryHookSaver không thể được khởi tạo vì không có tensor để tiết kiệm ...

Is có một giải pháp cho vấn đề của tôi? (Tôi đoán có nhưng còn thiếu giấy tờ về phần này trong tài liệu tensorflow)

  • Làm thế nào tôi có thể khởi tạo của tôi saver? Hoặc tôi có nên sử dụng các đối tượng khác như Giàn giáo không?
  • Làm cách nào để tôi có thể vượt qua tóm tắt tới SummaryHook vì chúng được xác định trong chức năng mô hình của tôi?

Xin cảm ơn trước.

PS: Tôi đã thấy API DNNClassifier nhưng tôi muốn sử dụng API ước tính cho Lưới liên kết và các API khác. Tôi cần tạo tóm tắt cho bất kỳ công cụ ước tính nào.

Trả lời

5

Trường hợp sử dụng dự định là bạn để Trình Ước tính lưu tóm tắt cho bạn. Có các tùy chọn trong RunConfig để định cấu hình viết tóm tắt. RunConfigs được chuyển khi constructing the Estimator.

+0

Ok tôi hiểu. Nhưng làm cách nào tôi có thể xác định tóm tắt được lưu? Tôi có nên sử dụng hàm tổng hợp vô hướng chuẩn trong chức năng mô hình không? – Ma2tg

+0

Có, những thứ đó sẽ được thêm vào bộ sưu tập tóm tắt và được chọn để được lưu tự động. –

+3

@Allen Lavoie Tôi không thể tìm thấy thông tin này trên hướng dẫn Quickstart/Làm việc với các nhà ước lượng mà các bạn nên nêu rõ: "Thêm tóm tắt của bạn vào bộ sưu tập - đó là cách" – Pietrko

Các vấn đề liên quan