2016-10-13 29 views
8

Tôi đang cố gắng tạo tệp pb từ mô hình Keras (tensorflow backend) của mình để tôi có thể tạo nó trên iOS. Tôi đang sử dụng freeze.py và tôi cần phải vượt qua các nút đầu ra. Làm thế nào để tôi có được tên của các nút đầu ra của mô hình Keras của tôi?Làm thế nào để bạn có được tên của các nút đầu ra tensorflow trong một Model Keras?

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/tools/freeze_graph.py

Trả lời

2

Các output_node_names nên chứa tên của các nút đồ thị, bạn có ý định sử dụng cho suy luận (ví dụ. Softmax). Nó được sử dụng để trích xuất các sub-graph đó sẽ là cần thiết cho suy luận. Có thể hữu ích khi xem freeze_graph_test.

6

Nếu nút đầu ra không được chỉ định một cách rõ ràng khi xây dựng một mô hình trong Keras, bạn có thể in chúng ra như thế này:

[print(n.name) for n in tf.get_default_graph().as_graph_def().node]

Sau đó, tất cả các bạn cần làm là tìm ra đúng một, mà thường là tương tự như tên của chức năng kích hoạt. Bạn chỉ có thể sử dụng tên chuỗi này mà bạn đã tìm thấy dưới dạng giá trị cho output_node_names trong hàm freeze_graph.

+1

Phương pháp này sẽ trả về hơn 10000 tên nút, cách tìm ra cái nào nên được chọn? Cảm ơn! –

3

Bạn cũng có thể sử dụng tiện ích tensorflow: summarize_graph để tìm kiếm có thể output_nodes. Từ số official documentation:

Nhiều công cụ mà công cụ hỗ trợ cần biết các lớp đầu vào và đầu ra của mô hình là gì. Nguồn tốt nhất cho chúng là quá trình đào tạo mô hình, trong đó đối với một trình phân loại các đầu vào sẽ là các nút nhận dữ liệu từ tập huấn luyện và đầu ra sẽ là các dự đoán. Nếu bạn không chắc chắn, công cụ summaryize_graph có thể kiểm tra mô hình và cung cấp các dự đoán về các nút đầu vào và đầu ra có khả năng, cũng như các thông tin khác hữu ích cho việc gỡ lỗi.

Chỉ cần biểu đồ đã lưu pb làm tệp nhập. Kiểm tra tài liệu để biết ví dụ.

0

Bạn có thể sử dụng Keras model.summary() để lấy tên của lớp cuối cùng.

Nếu model.outputs không có sản phẩm nào bạn có thể nhận được các tên nút qua:

[node.op.name for node in model.outputs] 

bạn sẽ có được phiên qua

session = keras.backend.get_session() 

và bạn chuyển đổi tất cả các biến đào tạo để consts qua

min_graph = convert_variables_to_constants(session, session.graph_def, [node.op.name for node in model.outputs]) 

sau đó bạn có thể ghi tệp protobuf qua

tensorflow.train.write_graph(min_graph, "/logdir/", "file.pb", as_text=True) 
Các vấn đề liên quan