Introduction
創建作用域
- 使用
tf.variable_scope()
函數創建作用域scope_name
參數:創建指定的名字- 其相當於是一種上下文環境
with tf.variable_scope("作用域名稱"):
- 將相對應的操作放置到相對應的作用域中使graph更整齊
未使用作用域
以上一篇文章所使用的線性回歸代碼作為例子1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34import tensorflow as tf
def LinearRegression():
X = tf.random_normal([100,1],mean=1.75,stddev=0.5, name="x_data")
y_true = tf.matmul(X,[[0.7]]) + 0.8
weight = tf.Variable(tf.random_normal([1,1],mean=0.0,stddev=1.0),name="w") #必須用變量定義才能優化(改變)
bias = tf.Variable(0.0,name="bias")
y_predict = tf.matmul(X,weight) + bias
loss = tf.reduce_mean(tf.square(y_true - y_predict))
train_op = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
init_var_op = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init_var_op)
print("起始初始化權重:%f, 初始化偏置:%f"%(weight.eval(),bias.eval()))
# 建立事件文件(指定存放文件夾及graph)
FileWriter = tf.summary.FileWriter("./summary/",graph=sess.graph)
for i in range(1000):
sess.run(train_op)
if i%50 == 0:
print("優化%d次後 權重:%f, 優化偏置:%f" % (i,weight.eval(), bias.eval()))
if __name__ == '__main__':
LinearRegression()
result
- 可以看到很多op裸露在外面較雜亂
使用作用域整理
1 | import tensorflow as tf |
result
- 產生的graph比未整理過的清爽
- graph理解性變高,結構調理清楚