cuốn sách gpt4 ai đã làm

python - 为什么 tf.cond() 将 tf.bool 识别为 python bool 而不是 tf.bool?

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 00:40:38 27 4
mua khóa gpt4 Nike

Đào tạo mạng lưới thần kinh để tìm hiểu XOR

Tôi đang cố gắng sử dụng "chuẩn hóa hàng loạt", tôi đã tạo một hàm lớp chuẩn hóa hàng loạt "batch_norm1".

    nhập tensorflow astf 
nhập numpy dưới dạng np



def batch_norm1(x, dim_of_x , is_training,scope_name='bn1',decay=0.7):
"""
Chuẩn hóa hàng loạt trên bản đồ tích chập.
Lập luận:
x:Tensor, batch_size x dim_of_x

"""

với tf.variable_scope(scope_name):

beta = tf.Variable(tf.constant(0.0, shape=[dim_of_x]),
name='beta', có thể huấn luyện=Đúng)
gamma = tf.Variable(tf.constant(1.0, shape=[dim_of_x]),
name='gamma', có thể huấn luyện=Đúng)
batch_mean, batch_var = tf.nn.moments(x, [0], name='moments')

Shadow_mean=tf.Variable(tf.constant(0.0, shape=[dim_of_x]),
name='shadow_mean', có thể huấn luyện=False)

Shadow_var=tf.Variable(tf.constant(0.0, shape=[dim_of_x]),
name='shadow_var', có thể huấn luyện=False)

def nghĩa_var_update():
với tf.control_dependents([tf.sign(shadow_mean,tf.mul(shadow_mean, sâu răng) + tf.mul(batch_mean, 1. - sâu răng) ),tf.sign(shadow_var,tf.mul(shadow_var, sâu răng) + tf .mul(batch_var, 1. - phân rã) )]):
trả về tf.identity(batch_mean), tf.identity(batch_var)


trung bình , var = tf.cond(is_training , Mean_var_update , lambda :tf.identity(shadow_mean), tf.identity(shadow_var))
Normed=tf.nn.batch_normalization(x, Mean, var, beta, gamma, 1e-3)
trả về định mức


def xavier_initializer(hình dạng):
dim_sum = np.sum(hình dạng)
nếu len(hình) == 1:
dim_sum += 1
ràng buộc = np.sqrt(6.0 / dim_sum)

return tf.random_uniform(shape, minval=-bound, maxval=bound)




với tf.Session() là sess:

Phase_train=tf.placeholder(dtype=tf.bool,shape=[])

x_=tf.placeholder(tf.float32,shape=[Không có,2])
y_=tf.placeholder(tf.float32, shape=[None,1], name="y-input")




BN0=batch_norm1(x_, 2, is_training=phase_train, phạm vi_name='bn0')







W_fc1=tf.Variable(xavier_initializer(shape=[2,100]),name="W1")

mul_1=tf.matmul(BN0,W_fc1)


BN1=batch_norm1(mul_1, 100, is_training=phase_train, phạm vi_name='bn1')

h_fc1=tf.nn.relu(BN1)



W_fc2=tf.Variable(xavier_initializer(shape=[100,100]),name="W2")

mul_2=tf.matmul(h_fc1,W_fc2)


BN2=batch_norm1(mul_2, 100, giai đoạn_train, phạm vi_name='bn2')

h_fc2=tf.nn.relu(BN2)


W_fc3=tf.Variable(xavier_initializer(shape=[100,100]),name="W3")

mul_3=tf.matmul(h_fc2,W_fc3)


BN3=batch_norm1(mul_3, 100, giai đoạn_train, phạm vi_name='bn3')

h_fc3=tf.nn.relu(BN3)


W_fc4=tf.Variable(xavier_initializer(shape=[100,100]),name="W4")

mul_4=tf.matmul(h_fc3,W_fc4)


BN4=batch_norm1(mul_4, 100, giai đoạn_train, phạm vi_name='bn4')

h_fc4=tf.nn.relu(BN4)



W_fc5=tf.Variable(xavier_initializer(shape=[100,1]),name="W5")
Bias1=tf.Variable(tf.zeros([1]),name="bias1")
y=tf.matmul(h_fc4,W_fc5)+Bias1

loss=tf.reduce_mean(tf.square(y-y_))



train_step=tf.train.AdamOptimizer(1e-3).minimize(loss)

XOR_X=np.array([[0.0,0.0],[0.0,1.0],[1.0,0.0],[1.0,1.0]])
XOR_Y=np.array([[0.0],[1.0],[1.0],[0.0]])
dữ liệu=np.append(XOR_X,XOR_Y,axis=1)

in dữ liệu

sess.run(tf.global_variables_initializer())

cho tôi trong phạm vi (60000):

Feed_dictionary={x_:data[:,0:2].reshape([-1,2]),y_:data[:,2].reshape([-1,1]),phase_train:True}
Feed_dictionary_predict={x_:data[:,0:2].reshape([-1,2]),y_:data[:,2].reshape([-1,1]),phase_train:False}
sess.run(train_step, Feed_dict=feed_dictionary)


print('chi phí',sess.run(loss, Feed_dict=feed_dictionary_predict))

cho vv trong tf.global_variables():
if vv.name == "bn0/shadow_mean:0":
print ("shadow_mean_of_x_ : {0} ".format(10000000.0* sess.run(vv)))

in()

Khi tôi chạy đoạn mã trên, tôi gặp lỗi sau:

Traceback (most recent call last):
Tệp "/home/minho/PycharmProjects/new_RL_algorithm/real_batch_normalization_test.py", dòng 120, trong
BN0=batch_norm1(x_, 2, is_training=phase_train, phạm vi_name='bn0')
Tệp "/home/minho/PycharmProjects/new_RL_algorithm/real_batch_normalization_test.py", dòng 89, trong batch_norm1
trung bình , var = tf.cond(is_training , Mean_var_update , lambda :tf.identity(shadow_mean), tf.identity(shadow_var))
Tệp "/home/minho/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/control_flow_ops.py", dòng 1756, trong cond
với ops.name_scope(name, "cond", [pred]) là tên:
Tệp "/home/minho/anaconda2/lib/python2.7/contextlib.py", dòng 17, trong __enter__
trả về self.gen.next()
Tệp "/home/minho/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", dòng 4056, trong name_scope
với g.as_default(), g.name_scope(n) làm phạm vi:
Tệp "/home/minho/anaconda2/lib/python2.7/contextlib.py", dòng 17, trong __enter__
trả về self.gen.next()
Tệp "/home/minho/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", dòng 2742, trong name_scope
nếu tên:
Tệp "/home/minho/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", dòng 547, trong __nonzero__
raise TypeError("Không được phép sử dụng `tf.Tensor` làm `bool` Python. "
TypeError: Không được phép sử dụng `tf.Tensor` làm Python `bool`. Sử dụng `if t is not None:` thay vì `if t:` để kiểm tra xem một tensor có được xác định hay không và sử dụng các hoạt động TensorFlow như tf .cond để thực thi các đồ thị con dựa trên giá trị của tensor.

我用过

Phase_train=tf.placeholder(dtype=tf.bool,shape=[])

, có loại là "tf.bool", làm đầu vào của hàm "batch_norm1". Tuy nhiên, lỗi cho biết tôi đã sử dụng python bool chứ không phải tf.bool. Bất cứ ai có thể cho tôi biết những gì đang xảy ra với mã này? ?

câu trả lời hay nhất

试试 tf.cast(is_training, tf.bool). Điều đó sẽ hiệu quả. Vì vậy, mã của bạn sẽ trở thành:

trung bình , var = tf.cond(tf.cast(is_training, tf.bool) , Mean_var_update , lambda :tf.identity(shadow_mean), tf.identity(shadow_var))

Nếu nó hoạt động xin vui lòng cho tôi biết.

Về python - tại sao tf.cond() nhận ra tf.bool là python bool thay vì tf.bool? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/42066512/

27 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress