2017-07-13 34 views
8

Tôi đang cố thêm một số bản ghi TensorBoard vào một mô hình sử dụng API tf.estimator mới.Tensorflow - Sử dụng tf.summary với 1.2 API ước tính

Tôi có một cái móc thiết lập như sau:

summary_hook = tf.train.SummarySaverHook(
    save_secs=2, 
    output_dir=MODEL_DIR, 
    summary_op=tf.summary.merge_all()) 

# ... 

classifier.train(
    input_fn, 
    steps=1000, 
    hooks=[summary_hook]) 

Trong model_fn của tôi, tôi cũng đang tạo ra một summary -

def model_fn(features, labels, mode): 
    # ... model stuff, calculate the value of loss 
    tf.summary.scalar("loss", loss) 
    # ... 

Tuy nhiên, khi tôi chạy mã này, tôi nhận được sau lỗi từ summary_hook: Exactly one of scaffold or summary_op must be provided. Điều này có thể do tf.summary.merge_all() không tìm thấy bất kỳ tóm tắt nào và trả về None, mặc dù tf.summary.scalar Tôi đã khai báo trong model_fn.

Mọi ý tưởng tại sao điều này sẽ không hoạt động?

Trả lời

3

Sử dụng tf.train.Scaffold() và vượt qua tf.merge_all như sau

summary_hook = tf.train.SummarySaverHook(
    save_secs=2, 
    output_dir=MODEL_DIR, 
    scaffold=tf.train.Scaffold(summary_op=tf.summary.merge_all())) 
+1

Tôi đã gần như cấu trúc mã tương tự, nhưng tôi nhận được lỗi sau: "Lỗi Loại: Fetch luận có loại không hợp lệ , phải là một chuỗi hoặc Tensor. (Không thể chuyển đổi một giàn giáo thành một Tensor hoặc hoạt động.) "Bất kỳ ý tưởng tại sao nó không hoạt động? Cảm ơn! – EXP0

+0

Trong các phiên bản mới của Tensorflow, điều này hoạt động nếu bạn vượt qua móc để' đánh giá', nhưng không cho 'train'. Đối với đào tạo, bạn chỉ cần xác định tóm tắt trong 'mode_fn' và chúng sẽ tự động được ghi vào tensorboard. (Vâng, tôi cũng cảm thấy điều này là ngu ngốc và không trực quan) – GPhilo

2

Chỉ cần cho bất cứ ai có câu hỏi này trong tương lai, các giải pháp được lựa chọn không làm việc cho tôi (xem ý kiến ​​của tôi trong các giải pháp được lựa chọn).

Thực tế, với API ước tính TF 1.2, bạn không cần phải có summary_hook. Tôi chỉ có tf.summary.scalar("loss", loss) trong model_fn và chạy mã mà không có summary_hook. Sự mất mát được ghi lại và hiển thị trong bảng mạch vành. Tôi không chắc chắn nếu TF API đã được thay đổi sau này và các câu hỏi tương tự.

+1

API ước tính tự động xử lý tóm tắt trong quá trình đào tạo. – 4dan

+0

Nó hoạt động miễn là bạn đặt tóm tắt trong 'model_fn'. Nếu bạn muốn tóm tắt một cái gì đó trong' input_fn'? (ví dụ, kiểm tra dữ liệu augmentation) bằng cách đăng nhập hình ảnh) – GPhilo

0

với Tensorflow ver-r1.3

Thêm ops tóm tắt của bạn trong dự toán của bạn model_fn

dụ:

tf.summary.histogram(tensorOp.name, tensorOp) 

Nếu bạn cảm thấy văn bản tóm tắt có thể tiêu tốn thời gian và không gian, bạn có thể kiểm soát tần suất viết tóm tắt, trong Công cụ ước tính run_config

run_config = tf.contrib.learn.RunConfig() 
run_config = run_config.replace(model_dir=FLAGS.model_dir) 
run_config = run_config.replace(save_summary_steps=150) 
của bạn

Lưu ý: điều này sẽ ảnh hưởng đến các bản tóm tắt tần số nhà văn tổng thể cho TensorBoard khai thác gỗ, các ước lượng của bạn (tf.estimator.Estimator)

+0

Điều này sẽ không hoạt động để đánh giá, tuy nhiên. – GPhilo

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