亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

打印張量元素 (v1.14)

打印張量元素 (v1.14)

海綿寶寶撒 2023-06-20 15:39:46
我想了解 keras/tensorflow 是如何工作的。在這個例子中,我正在使用一個LSTM具有定義loss功能的網絡。在此示例中,我想打印y_pred和loss變量中的值,但是標準print()函數不會打印實際數值。當我嘗試print()函數時,我得到以下輸出:Tensor("loss_13/dense_14_loss/strided_slice:0", shape=(), dtype=float32)import tensorflow as tffrom tensorflow.keras import Sequential, backend as Kfrom tensorflow.keras.layers import Dense, LSTM, Dropoutfrom tensorflow.keras.losses import categorical_crossentropyregressor = Sequential()regressor.add(LSTM(units = 10, dropout=0.10, return_sequences = True, input_shape = (X.shape[1], X.shape[2])))regressor.add(Dense(units = 4, activation='softmax'))regressor.compile(optimizer = optimizer, loss = weight_fx(np.array([0.005,0.20,0.79,0.005])), metrics = ['categorical_accuracy'])def weight_fx(weights):    weights = K.variable(weights)         def loss(y_true, y_pred):        y_pred /= K.sum(y_pred, axis=-1, keepdims=True)        print(y_pred)        loss = y_true * K.log(y_pred) * weights        return loss        return loss
查看完整描述

2 回答

?
慕容森

TA貢獻1853條經驗 獲得超18個贊

嘗試這樣做:


import tensorflow as tf

from tensorflow.keras import Sequential, backend as K

from tensorflow.keras.layers import Dense, LSTM, Dropout

from tensorflow.keras.losses import categorical_crossentropy

import numpy as np


X = tf.ones((10,10,10))

y = tf.ones((10,1))

def weight_fx(weights):

? ? weights = K.variable(weights)? ? ?

? ? def loss(y_true, y_pred):

? ? ? ? y_pred /= K.sum(y_pred, axis=-1, keepdims=True)

? ? ? ? tf.print(y_pred)

? ? ? ? loss = y_true * K.log(y_pred) * weights

? ? ? ? return loss

? ??

? ? return loss


regressor = Sequential()

regressor.add(LSTM(units = 10, dropout=0.10, return_sequences = True,?

? ? ? ? ? ? ? ? ? ?input_shape = (X.shape[1], X.shape[2])))

regressor.add(Dense(units = 4, activation='softmax'))

regressor.compile(optimizer = 'adam', loss = weight_fx(np.array([0.005,0.20,0.79,0.005])), metrics = ['categorical_accuracy'])

regressor.fit(X,y)

  • 問:你為什么看到Tensor("loss_13/dense_14_loss/strided_slice:0", shape=(), dtype=float32)

  • 答:Tensorflow 預計損失函數會被頻繁調用,因此盡可能對其進行優化至關重要。Tensorflow 有一種方法可以做到這一點,稱為“追蹤”。這基本上意味著傳遞一個“檢測器”變量,該變量“體驗”函數中的所有操作并記住它們。然后,基于這些經驗,Tensorflow 構建了一個單獨的所謂“圖形”函數,該函數速度更快,并且無法調用 python 中具有副作用的許多常見函數。喜歡print()。你看到的是一個檢測器或“示蹤劑”。它只運行一次。

  • 那我該如何調試呢?

  • 有幾種方法可以做到這一點。如果要print調試,請使用tf.print.?根據我的經驗,這有時有效,有時無效。如果沒有,并且您仍然只看到檢測器變量,請使用model.run_eagerly = True或將其作為參數傳遞給model.compile.?即使你不使用tf.print和設置run_eagerly,python 的內置print仍然可以工作(試試這個)。最后但同樣重要的是,您可以將所有副作用函數包裝在一個tf.py_function.?

另外,請確保先定義函數,然后在 中使用它model.compile,尤其是在使用 Jupyter notebook 時。一個有問題的舊聲明可能仍然存在于記憶中并且可能會毀了你的一天。

這有幫助嗎?


查看完整回答
反對 回復 2023-06-20
?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

我還沒有嘗試過,但你應該始終使用:

tf.print(value)

而不是正常的

print(value)
查看完整回答
反對 回復 2023-06-20
  • 2 回答
  • 0 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號