tensorflow在1.4版本引入了keras,封裝成庫。現想將keras版本的gru**移植到tensorflow中,看到tensorflow中有keras庫,大喜,故將神經網路定義部分使用keras的function api方式進行定義,訓練部分則使用tensorflow來進行編寫。一頓操作之後,執行,沒有報錯,不由得一喜。但是輸出結果,發現,和預期的不一樣。難道是欠擬合?故採用正弦波**余弦來驗證演算法模型。
部分呼叫keras庫**如上圖所示,用正弦波**余弦波,出現如下現象:
def inte***ce(_input):
tmp = tf.keras.layers.dense(10)(_input)
vad_gru = tf.keras.layers.gru(24, return_sequences=true)(tmp)
denoise_output = tf.keras.layers.dense(1)(vad_gru)
return denoise_output
波形是斷斷續續的。而且最後不收斂。
執行n久。。。之後
基本斷定是程式本身的問題,於是通過排查,發現應該是gru的initial_state沒有進行更新導致的。導致波形是斷斷續續的,沒有學習到前一次網路的輸出。於是,決定不使用keras庫實現一遍:
部分**如下:
def inte***ce(_input):
tmp = tf.keras.layers.dense(10)(_input)
gru_cell = tf.nn.rnn_cell.grucell(vad_cell_size)
with tf.name_scope('initial_state'):
cell_init_state = gru_cell.zero_state(batch_size, dtype=tf.float32)
cell_outputs, cell_final_state = tf.nn.dynamic_rnn(
gru_cell, tmp, initial_state=cell_init_state, time_major=false)
denoise_output = tf.keras.layers.dense(1)(cell_outputs)
return denoise_output, cell_init_state, cell_final_state
波形圖如下(這才是gru的正確開啟方式啊~):
再回頭看之前寫的呼叫keras,既然知道了是initial_state沒有更新,那麼如何進行更新呢?
網上查詢了大量的資料,說要加上
update_ops =
for old_value, new_value in layers.updates:
但是加上去沒有效果,是我加錯了還是其他的,大家歡迎指出來
以下是我做的一些嘗試,就不一一詳細說明了,大家看一下,具體不再展開,有問題大家交流一下,有解決方法的,能夠分享出來,感激不盡~
def inte***ce(_input):# input_layer = tf.keras.layers.input([none, 1])
# input_layer = tf.keras.layers.input(batch_shape=(50, 20, 1))
tmp = tf.keras.layers.dense(10)(_input)
# tmp = tf.keras.layers.dense(24)(tmp)
# with tf.variable_scope('vad_gru', reuse=tf.auto_reuse):
# vad_gru, final_state = tf.keras.layers.gru(24, return_sequences=true, return_state=true, stateful=true)(tmp)
# print(vad_gru)
# _initial_state = vad_gru.zero_state(50, tf.float32)
# tf.get_variable_scope().reuse_variables()
# vad_gru = tf.contrib.
# tmp = tf.reshape(tmp, [-1, time_steps, vad_cell_size])
gru_cell = tf.nn.rnn_cell.grucell(vad_cell_size)
# gru_cell = tf.keras.layers.grucell(self.vad_cell_size)
with tf.name_scope('initial_state'):
cell_init_state = gru_cell.zero_state(batch_size, dtype=tf.float32)
cell_outputs, cell_final_state = tf.nn.dynamic_rnn(
gru_cell, tmp, initial_state=cell_init_state, time_major=false)
# print(cell_outputs.get_shape().as_list())
# cell_outputs = tf.reshape(cell_outputs, [-1, vad_cell_size])
denoise_output = tf.keras.layers.dense(1)(cell_outputs)
print(denoise_output.get_shape().as_list())
# model = tf.keras.models.model(input_layer, denoise_output)
# update_ops =
# for old_value, new_value in model.layers[1].updates:
return denoise_output, cell_init_state, cell_final_state
c 呼叫Tensorflow模組
最近在搞kinect人體骨架識別的研究,因為姿勢識別要用到深度學習方面的東西,而現在比較流行的深度學習框架是tensorflow,對python支援的相當好,我的專案是用c 寫的,難免這兩種語言做互動,接下來我就c 如何調python做一下總結。一,建乙個win32控制台專案c tensorflow...
c 呼叫tensorflow的例子
乙個很簡單的例子,使用c 呼叫tensorflow。首先需要安裝windows 版本的tensowflow,使用64位的python3.5,如果沒有安裝,需要首先安裝python3.5 然後以管理員方式進入命令列,執行 pip install tensorflow starcorefactory s...
git獲取Android指定版本的kernel核心
git clone git kernel 在這裡需要提一下的就是,git有本地的分支跟遠端伺服器分支兩個概念,當clone整個common.git的時候,本地只有android 2.6.36這個分支的,使用下面命令可以檢視當前目錄的本地分支 git branch bing bing laptop a...