Đà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? ?
Tôi là một lập trình viên xuất sắc, rất giỏi!