在訓練深度神經網路的時候,我們經常會使用dropout,然而在test
的時候,需要把dropout
撤掉.為了應對這種問題,我們通常要建立兩個模型,讓他們共享變數。詳情.
為了使用tensorboard
來視覺化我們的資料,我們會經常使用summary
,最終都會用乙個簡單的merge_all
函式來管理我們的summary
當這兩種情況相遇時,bug
就產生了,看**:
import tensorflow as tf
import numpy as np
class
model
(object):
def__init__
(self):
self.graph()
self.merged_summary = tf.summary.merge_all()# 引起血案的地方
defgraph
(self):
self.x = tf.placeholder(dtype=tf.float32,shape=[none,1])
self.label = tf.placeholder(dtype=tf.float32, shape=[none,1])
w = tf.get_variable("w",shape=[1,1])
self.predict = tf.matmul(self.x,w)
self.loss = tf.reduce_mean(tf.reduce_sum(tf.square(self.label-self.predict),axis=1))
self.train_op = tf.train.gradientdescentoptimizer(0.01).minimize(self.loss)
tf.summary.scalar("loss",self.loss)
defrun_epoch
(session, model):
x = np.random.rand(1000).reshape(-1,1)
label = x*3
feed_dic =
su = session.run([model.merged_summary], feed_dic)
defmain
():with tf.graph().as_default():
with tf.name_scope("train"):
with tf.variable_scope("var1",dtype=tf.float32):
model1 = model()
with tf.name_scope("test"):
with tf.variable_scope("var1",reuse=true,dtype=tf.float32):
model2 = model()
with tf.session() as sess:
tf.global_variables_initializer().run()
run_epoch(sess,model1)
run_epoch(sess,model2)
if __name__ == "__main__":
main()
運**況是這樣的: 執行run_epoch(sess,model1)
時候,程式並不會報錯,一旦執行到run_epoch(sess,model1)
,就會報錯(錯誤資訊見文章最後)。
看**片段:
class
model
(object):
def__init__
(self):
self.graph()
self.merged_summary = tf.summary.merge_all()# 引起血案的地方
...with tf.name_scope("train"):
with tf.variable_scope("var1",dtype=tf.float32):
model1 = model() # 這裡的merge_all只是管理了自己的summary
with tf.name_scope("test"):
with tf.variable_scope("var1",reuse=true,dtype=tf.float32):
model2 = model()# 這裡的merge_all管理了自己的summary和上邊模型的summary
由於summary
的計算是需要feed
資料的,所以會報錯。
我們只需要替換掉merge_all
就可以解決這個問題。看**
class
model
(object):
def__init__
(self,scope):
self.graph()
self.merged_summary = tf.summary.merge(
tf.get_collection(tf.graphkeys.summaries,scope)
)...with tf.graph().as_default():
with tf.name_scope("train") as train_scope:
with tf.variable_scope("var1",dtype=tf.float32):
model1 = model(train_scope)
with tf.name_scope("test") as test_scope:
with tf.variable_scope("var1",reuse=true,dtype=tf.float32):
model2 = model(test_scope)
關於tf.get_collection
位址
tensorflow.python.framework.errors_impl.invalidargumenterror: you must feed a value for placeholder tensor 『train/var1/placeholder』 with dtype float
[node: train/var1/placeholder = placeholder[dtype=dt_float, shape=, _device=」/job:localhost/replica:0/task:0/gpu:0」]]
signed unsigned 引發的血案
bug描述 問題產生於區域網傳輸一幅。服務端負責傳送,是由另乙個同事用c 寫的,我用c 寫接收客戶端。我們約定在傳輸一幅前,先傳固定4個位元組的size資訊,然後傳資料。結果發現有些總是末尾壞掉一截或是乾脆就傳不過來。bug原因 在我接收到size 4 後,我採用了size size 3 256 2...
parseInt引發的血案
今天做了個專題活動,頁面頭上有個倒計時 專題做完後上線了,沒發現有什麼問題,結果,運營mm突然和我說 技術哥哥出問題了,360瀏覽器在秒數從10到09的時候直接變成 00 了 一看我去真的,該死的360 還有ie7 這個倒計時的原理是先獲取系統時間.分鐘,秒,毫秒賦值在span上面 span id ...
條件斷點引發的血案
今天在除錯打條件斷點時,想起一出除錯往事。同樣也是條件斷點,難倒了我們這所有程式設計師。為了以後總能記得這事,把這事寫到偶部落格裡。當時我們伺服器的光哥在 linux 下用gdb 除錯一段 發現執行到乙個地方時有乙個變數的值是乙個與預期不符的值,於是順手打了乙個條件斷點 當執行到這一行,這個變數的值...