Tensorflow 框架的一些細節

2022-05-25 08:00:13 字數 1481 閱讀 2134

其中常用的fetches和feed_dict就是常用的傳入引數。fetches主要指從計算圖中取回計算結果進行放回的那些placeholder和變數,而feed_dict則是將對應的資料傳入計算圖中佔位符,它是字典資料結構只在呼叫方法內有效。

dien 的**在 model.train() 和 model.calculate() 中都用到了 session.run() 函式,

在這裡,train() 要進行模型的優化,所以需要輸出 self.optimizer, 保證 self.optimizer 這一變數進行了更新

calculate() 實際上是對應測試,需要輸出 self.y_hat, 但並不需要進行模型的優化,迭代乙個梯度步

似乎是必須要指定最後一維的維數,而先前 self.target_timepoint, self.item_history_timepoint 的維度無法被推測出來。因為 [128, 7], 128 是 batch size, 可能會變化,但是 tensorflow 靜態圖,必須先預先確定維數。

self.target_timepoint = tf.placeholder(tf.float32, [none, 7], name='target_timepoint') #[128, 7]
類似如下在 model 中的修改修改:

self.timeconsecutive_history.set_shape([none, none, 7])

self.timecurrent_history.set_shape([none, none, 7])

這兩種修改似乎都可以成功。

target_timepoint_np = np.zeros((n_samples, len(target_timepoint[0]))).astype('float32') # [128, 7]

for idx in range(128) :

target_timepoint_np[idx, :] = target_timepoint[idx]

最終導致如下錯誤:

valueerror: cannot feed value of shape (128, 0) for tensor u'inputs/target_timepoint:0', which has shape '(?, 7)'

輸出 print target_timepoint_np, 發現了最後面有乙個空 , 這才發現了這個錯誤。

# from __future__ import absolute_import

# from __future__ import division

# from __future__ import print_function

需要使用這個。

或者 保證除法有乙個數是浮點數,這樣,就可以使得最終的數也是浮點數。我之前好像全部都弄錯了?!

奇怪的是,當換用了小的 train data, 程式能夠正常執行了。

Tensorflow的一些基本用法

在使用tensorflow中會遇到一些其基本的用法,再次作為記錄備忘 在計算整體的loss是會將不同部分的loss放入乙個集合中,最後計算整體的loss,因此會用到tf.add to collection,具體參考tensorflow中的cifar10的例子,用法如下所示 tf.add to col...

TensorFlow的一些學習筆記

1 靈活性tensorflow不是乙個嚴格的神經網路工具包,只要你可以使用資料流圖來描述你的計算過程,你可以使用tensorflow做任何事情。你還可以方便地根據需要來構建資料流圖,用簡單的python語言來實現高層次的功能。2 可移植性tensorflow可以在任意具備cpu或者gpu的裝置上執行...

tensorflow遇到的一些錯誤

1 tensorflow dtype t.dtype.base dtype attributeerror float object has no attribute dtype 參考 我報錯的行是 disc gradients disc optimizer.compute gradients dis...