2015-11-19 31 views
16

Tôi đang cố triển khai mạng chuyển tiếp nguồn cấp dữ liệu đơn giản. Tuy nhiên, tôi không thể tìm ra cách để nuôi một số Placeholder. Ví dụ này:Cách nạp một trình giữ chỗ?

import tensorflow as tf 

num_input = 2 
num_hidden = 3 
num_output = 2 

x = tf.placeholder("float", [num_input, 1]) 
W_hidden = tf.Variable(tf.zeros([num_hidden, num_input])) 
W_out = tf.Variable(tf.zeros([num_output, num_hidden])) 
b_hidden = tf.Variable(tf.zeros([num_hidden])) 
b_out = tf.Variable(tf.zeros([num_output])) 

h = tf.nn.softmax(tf.matmul(W_hidden,x) + b_hidden) 

sess = tf.Session() 

with sess.as_default(): 
    print h.eval() 

Cung cấp cho tôi những lỗi sau:

... 
    results = self._do_run(target_list, unique_fetch_targets, feed_dict_string) 
    File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/client/session.py", line 419, in _do_run 
    e.code) 
tensorflow.python.framework.errors.InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder' with dtype float and shape dim { size: 2 } dim { size: 1 } 
    [[Node: Placeholder = Placeholder[dtype=DT_FLOAT, shape=[2,1], _device="/job:localhost/replica:0/task:0/cpu:0"]()]] 
Caused by op u'Placeholder', defined at: 
    File "/home/sfalk/workspace/SemEval2016/java/semeval2016-python/slot1_tf.py", line 8, in <module> 
    x = tf.placeholder("float", [num_input, 1]) 
    ... 

Tôi đã thử

tf.assign([tf.Variable(1.0), tf.Variable(1.0)], x) 
tf.assign([1.0, 1.0], x) 

nhưng điều đó không làm việc rõ ràng.

+0

câu hỏi hay, tôi đã cố gắng tìm ra số liệu quá –

Trả lời

28

Để cấp nguồn giữ chỗ, bạn sử dụng đối số feed_dict để Session.run() (hoặc Tensor.eval()). Hãy nói rằng bạn có đồ thị dưới đây, với một trình giữ chỗ:

x = tf.placeholder(tf.float32, shape=[2, 2]) 
y = tf.constant([[1.0, 1.0], [0.0, 1.0]]) 
z = tf.matmul(x, y) 

Nếu bạn muốn đánh giá z, bạn phải ăn một giá trị cho x. Bạn có thể thực hiện việc này như sau:

sess = tf.Session() 
print sess.run(z, feed_dict={x: [[3.0, 4.0], [5.0, 6.0]]}) 

Để biết thêm thông tin, hãy xem documentation on feeding.

+0

Hmm .. không có cách nào khác? Điều đó có vẻ bất tiện nếu tôi, ví dụ: muốn xem kết quả trung gian. – displayname

+0

Bạn cũng có thể chuyển đối số 'feed_dict' vào' Tensor.eval() ', có thể thuận tiện hơn khi xây dựng biểu đồ. Nếu bạn muốn một trình giữ chỗ "dính", tôi khuyên bạn nên thực hiện hàm riêng của bạn để kết thúc 'sess.run()', nắm bắt một tập hợp các giá trị nguồn cấp dữ liệu và chuyển nó tới cuộc gọi 'run()' mỗi lần. – mrry

+0

@mrry, bạn có thể làm ví dụ về nhận xét của mình không? Cảm ơn – Amir

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