Tôi đang cố gắng tìm hiểu cách làm việc với các nhà văn tóm tắt lưu lượng bằng cách thực hiện theo hướng dẫn của mọt sách HowTo. Hướng dẫn đó thêm một bản tóm tắt vô hướng cho hàm mất. Tôi đã viết một chức năng mất mát trong một không bình thường bằng việc xây dựng một thuật ngữ quy tắc, và tôi nhận được ngoại lệ này:Tóm tắt các thẻ tóm tắt vô hướng lưu lượng truy cập tên ngoại lệ
W tensorflow/core/common_runtime/executor.cc:1027] 0x1e9ab70 Compute status: Invalid argument: tags and values not the same shape: [] != [1]
[[Node: ScalarSummary = ScalarSummary[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"](ScalarSummary/tags, loss)]]
Chức năng mất mát và bổ sung thêm các bản tóm tắt giống như
loss = tf.add(modelError, regularizationTerm, name='loss')
tf.scalar_summary(loss.op.name, loss)
và nếu tôi xây dựng regularizationTerm như thế này
regularizationTerm = tf.Variable(tf.zeros([1], dtype=np.float32), name='regterm')
regularizationTerm += tf.mul(2.0, regA)
regularizationTerm += tf.mul(3.0, regB)
là Rega và regB là tf.Variables xác định trước đó, tôi nhận được ngoại lệ, trong khi đó là tôi xây dựng nó lên như
regularizationTerm = tf.add(tf.mul(2.0, regA), tf.mul(3.0, regB), name='regterm')
thì nó hoạt động. Vì vậy, tôi đoán tôi không đặt tên chính xác, khi tôi làm + = tôi tạo ra một tensor mới mà không được đặt tên? Nhưng tại sao tôi không thể thêm nó vào sự mất mát, và sau đó đặt tên cho sự mất mát? Đó là điều duy nhất tôi đang cố gắng tóm tắt?
Có điều gì đó như + = nơi tôi có thể đặt tên cho đầu ra hoặc giữ tên của tensor mà tôi đang sửa đổi không?
Trong trường hợp vấn đề có liên quan đến cái gì khác, đây là ví dụ đơn giản của tôi, nơi tôi đã xác định vấn đề:
import numpy as np
import tensorflow as tf
def main():
x_input = tf.placeholder(tf.float32, shape=(None, 1))
y_output = tf.placeholder(tf.float32, shape=(None, 1))
hidden_weights = tf.Variable(tf.truncated_normal([1,10], stddev=0.1), name='weights')
output_weights = tf.Variable(tf.truncated_normal([10,1], stddev=0.1), name='output')
inference = tf.matmul(tf.matmul(x_input, hidden_weights), output_weights)
regA = tf.reduce_sum(tf.pow(hidden_weights, 2))
regB = tf.reduce_sum(tf.pow(output_weights, 2))
modelError = tf.reduce_mean(tf.pow(tf.sub(inference,y_output),2), name='model-error')
fail = True
if fail:
regularizationTerm = tf.Variable(tf.zeros([1], dtype=np.float32), name='regterm')
regularizationTerm += tf.mul(2.0, regA)
regularizationTerm += tf.mul(3.0, regB)
else:
regularizationTerm = tf.add(tf.mul(2.0, regA), tf.mul(3.0, regB), name='regterm')
loss = tf.add(modelError, regularizationTerm, name='loss')
tf.scalar_summary(loss.op.name, loss)
optimizer = tf.train.GradientDescentOptimizer(0.05)
global_step = tf.Variable(0, name='global_step', trainable=False)
train_op = optimizer.minimize(loss, global_step=global_step)
summary_op = tf.merge_all_summaries()
saver = tf.train.Saver()
sess = tf.Session()
init = tf.initialize_all_variables()
sess.run(init)
summary_writer = tf.train.SummaryWriter('train_dir',
graph_def=sess.graph_def)
feed_dict = {x_input:np.ones((30,1), dtype=np.float32),
y_output:np.ones((30,1), dtype=np.float32)}
for step in xrange(1000):
_, loss_value = sess.run([train_op, loss], feed_dict=feed_dict)
if step % 100 == 0:
print("step=%d loss=%.2f" % (step, loss_value))
summary_str = sess.run(summary_op, feed_dict=feed_dict)
summary_writer.add_summary(summary_str, step)
if __name__ == '__main__':
main()
Những cả làm việc! Tôi đã không nhận ra mối quan hệ hình dạng giữa các đối số scalar_summary, hoặc cú pháp để xác định một vô hướng, cảm ơn! – MrCartoonology
Cảm ơn! Không nhận ra rằng '[]' và '[1]' khác nhau. Tôi tự hỏi tại sao nó làm hỏng tf ... – Pinocchio