![](/img/trans.png)
[英]How can I fix this python error “global name 'create_question' is not defined”
[英]In Tensorflow, how can i fix the error of “global name is not defined”?
我嘗試建立一個tensorflow模型,這是代碼,共有三個python文件。 (1)opt4_8generateData.py
#coding:utf-8
import matplotlib.pyplot as plt
import numpy as np
seed=2
def generates():
rdm=np.random.RandomState(seed)
X=rdm.randn(300,2)
Y_=[int(x0*x0+x1*x1<2) for (x0,x1) in X]
Y_c=[['red' if y else 'blue'] for y in Y_]
#對數據集進行整理,第一個元素為-1表示跟隨第二列計算,第二個元素表示多少 #列
X=np.vstack(X).reshape(-1,2)
Y_=np.vstack(X).reshape(-1,1)
return X,Y_,Y_c
(2)opt4_8forward.py
#coding:utf-8
import tensorflow as tf
def get_weight(shape,rugalarizer):
w=tf.Variable(tf.random_normal(shape),dtype=tf.float32)
tf.add_to_collection('losses',tf.contrib.layers.l2_regularizer(regularizer)(w))
return w
def get_bias(shape):
b=tf.Variable(tf.constant(0.01,shape=shape))
return b
def forward(x,regularizer):
w1=get_weight([2,11],regularizer)
b1=get_bias([11])
y1=tf.nn.relu(tf.matmul(x,w1)+b1)
w2=get_weight([11,1],regularizer)
b2=get_bias([1])
y=tf.matmul(y1,w2)+b2
return y
(3)opt4_8backward.py
#coding:utf-8
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import opt4_8generateData
import opt4_8forward
STEPS=40000
BATCH_SIZE=30
LEARNING_RATE_BASE=0.001
LEARNING_RATE_DECAY=0.999
REGULARIZER=0.01
def backward():
x=tf.placeholder(tf.float32,shape=(None,2))
y_=tf.placeholder(tf.float32,shape=(None,1))
X,Y_,Y_c=opt4_8generateData.generates()
y=opt4_8forward.forward(x,REGULARIZER)
global_step=tf.Variable(0,trainable=False)
learning_rate=tf.train.exponential_decay(
LEARNING_RATE_BASE,
global_step,
300/BATCH_SIZE,
LEARNING_RATE_DECAY,
staircase=True)
loss_mse=tf.reduce_mean(tf.square(y-y_))
loss_total=loss_mse+tf.add_n(tf.get_collection("losses"))
#定義反向傳播方法:包含正則化
train_step=tf.train.AdamOptimizer(learning_rate).minimize(loss_total)
with tf.Session() as sess:
init_op=tf.global_variables_initializer()
sess.run(init_op)
for i in range(STEPS):
start=(i*BATCH_SIZE)%300
end=start+BATCH_SIZE
sess.run(train_step,feed_dict={x:X[start:end],y_:Y[start:end]})
if i%2000==0:
loss_y=sess.run(loss_total,feed_dict={x:X,y_:Y_})
print "After %d steps,loss is:%f" %(i,loss_y)
xx,yy=np.mgrid[-3:3:.01,-3:3:.01]
grid=np.c_[xx.ravel(),yy.ravel()]
probs=sess.run(y,feed_dict={x:grid})
probs=probs.reshape(xx.shape)
plt.scatter(X[:,0],X[:,1],c=np.squeeze(Y_c))
plt.contour(xx,yy,probs,levels=[.5])
plt.show()
if __name__=='__main__':
backward()
當我運行“ python opt4_8backward.py”時,出現錯誤:
Traceback (most recent call last):
File "opt4_8backward.py", line 57, in <module>
backward()
File "opt4_8backward.py", line 19, in backward
y=opt4_8forward.forward(x,REGULARIZER)
File "/home/yuan/tf/opt4_8forward.py", line 14, in forward
w1=get_weight([2,11],regularizer)
File "/home/yuan/tf/opt4_8forward.py", line 6, in get_weight
tf.add_to_collection('losses',tf.contrib.layers.l2_regularizer(regularizer)(w))
NameError: global name 'regularizer' is not defined
我該如何解決此錯誤?非常感謝。 我檢查了我的代碼,看來我和老師的代碼沒有什么區別。
在opt4_8forward.py
, get_weight
函數定義為:
def get_weight(shape,rugalarizer):
w=tf.Variable(tf.random_normal(shape),dtype=tf.float32)
tf.add_to_collection('losses',tf.contrib.layers.l2_regularizer(regularizer)(w))
return w
在這里,函數參數名為rugalarizer
,在同一函數中,您具有以下代碼行:
tf.add_to_collection('losses',tf.contrib.layers.l2_regularizer(regularizer)(w))
因此, regularizer
器未定義。 IIUC,功能必須定義為:
def get_weight(shape,regularizer):
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.