2015-12-13 28 views
7

Tôi làm việc với rất nhiều dữ liệu dtype="str". Tôi đã cố gắng để xây dựng một đồ thị đơn giản như trong https://www.tensorflow.org/versions/master/api_docs/python/train.html#SummaryWriter.Hợp nhất chuỗi tensors trong TensorFlow

Đối với một thao tác đơn giản, tôi muốn nối chuỗi với nhau bằng cách sử dụng placeholder như trong (How to feed a placeholder?)

Có ai biết làm thế nào để hợp nhất tensors chuỗi lại với nhau?

import tensorflow as tf 
sess = tf.InteractiveSession() 

with tf.name_scope("StringSequence") as scope: 
    left = tf.constant("aaa",name="LEFT") 
    middle = tf.placeholder(dtype=tf.string, name="MIDDLE") 
    right = tf.constant("ccc",name="RIGHT") 
    complete = tf.add_n([left,middle,right],name="COMPLETE") #fails here 
sess.run(complete,feed_dict={middle:"BBB"}) 
#writer = tf.train.SummaryWriter("https://stackoverflow.com/users/mu/test_out/", sess.graph_def) 

Trả lời

2

Không có cách nào để thực hiện việc này tại thời điểm hiện tại, AFAIK.

Nhận ra rằng đây là câu trả lời đáng thất vọng, tôi đã nộp issue #701 on GitHub để theo dõi yêu cầu này.

+0

OP có thể thêm [TensorFlow op] mới (https://www.tensorflow.org/versions/master/how_tos/adding_an_op/index.html) không? –

+1

Vâng, đó sẽ là một cách để làm điều đó. Chúng tôi hoan nghênh sự đóng góp - đây rõ ràng là điều mà nhiều người sẽ muốn. – dga

+1

Tôi bị cám dỗ nhưng sẽ không phải trong vài tháng vì tôi vẫn phải trải qua các ví dụ TensorFlow cơ bản, ví dụ về GPU, và sau đó nhận được C++ của tôi lên đến tốc độ. Tôi hiện đang dịch [Mạng nơron và Học tập Sâu] (http://neuralnetworksanddeeplearning.com/) sang F # để tận dụng kiến ​​thức F # của tôi vào việc học sâu và học Python. Nhưng tôi sẽ giữ nó cao trong danh sách bây giờ mà bạn xác nhận tôi bắt đầu nắm bắt TensorFlow. Cảm ơn. –

3

Tôi biết đây không phải là câu trả lời ngay lập tức và không muốn điều này vẫn bị ẩn trong các nhận xét.

Nếu bạn muốn kết hợp một thao tác không có trong thư viện hiện có, bạn có thể tạo custom Op. Để kết hợp tùy chỉnh Op của mình, bạn cần phải:

  • Đăng ký OP mới trong tệp C++. Việc đăng ký Op là độc lập với việc thực hiện, và mô tả các ngữ nghĩa của cách Op được gọi. Ví dụ, nó định nghĩa tên Op và xác định đầu vào và đầu ra của nó.
  • Triển khai Op trong C++. Việc triển khai này được gọi là "hạt nhân" và có thể có nhiều hạt nhân cho các kiến ​​trúc khác nhau (ví dụ: CPU, GPU) hoặc các loại đầu vào/đầu ra.
  • Tạo trình bao bọc Python. Trình bao bọc này là API công khai để tạo Op. Trình bao bọc mặc định được tạo từ đăng ký Op, có thể được sử dụng trực tiếp hoặc được thêm vào.
  • Tùy chọn, viết một hàm để tính toán độ dốc cho Op.
  • Tùy chọn, viết một hàm mô tả các hình dạng đầu vào và đầu ra cho Op. Điều này cho phép suy luận hình dạng để làm việc với Op của bạn.
  • Kiểm tra Op, thường bằng Python. Nếu bạn định nghĩa các gradient, bạn có thể xác minh chúng bằng trình theo dõi GradientChecker của Python.

Điều bạn hỏi nếu rất phù hợp và có thể sẽ trở thành một trong những kết quả tìm kiếm của Google cao hơn trong tương lai để sử dụng loại chuỗi với TensorFlow; như vậy con đường này đến một giải pháp cần phải có sẵn để những người khác nhận thức được nó tồn tại.

15

Nhờ câu hỏi của bạn, chúng tôi đã ưu tiên thêm hỗ trợ cho chuỗi nối trong TensorFlow và thêm nó vào this commit. Kết nối chuỗi được triển khai bằng toán tử hiện tại tf.add(), để phù hợp với hành vi của NumPy's add operator (bao gồm phát sóng).

Thực hiện ví dụ của bạn, bạn có thể viết:

complete = left + middle + right 

... hoặc tương đương, nhưng nếu bạn muốn đặt tên cho tensor kết quả:

complete = tf.add(tf.add(left, middle), right, name="COMPLETE") 

Chúng tôi chưa thêm hỗ trợ cho các chuỗi trong tf.add_n() (hoặc các công cụ liên quan có liên quan như tf.reduce_sum()) nhưng sẽ xem xét điều này nếu có trường hợp sử dụng cho nó.

LƯU Ý: Để sử dụng chức năng này ngay lập tức, bạn cần phải build TensorFlow from source. Op mới sẽ có trong bản phát hành tiếp theo của TensorFlow (0.7.0).

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