0

我在TensorFlow中實現了一種新型的NN。區別在於評估函數,所以不要致電tf.matmul(),而是調用我自己的函數,我們將其稱爲My_Function(A)For'overType'循環TensorFlow尺寸

代碼片段可以在下面看到,其中A是左邊的張量乘以這個新的NN實現,它在右邊。等效張量流代碼將爲tf.matmul(A, this_new_NN)

def My_Function(self, A): 
    dims = A.get_shape().as_list() 
    shape = [dims[0], self.m] # Defining shape of resulting tensor 
    X = tf.placeholder(tf.float32, shape=[shape[0], shape[1]]) 
    result = tf.zeros(tf.shape(X), dtype=tf.float32) 
    for xyz in self.property: 
     # Do some computation between A and xyz, xyz is a property of this_new_NN 
     # resulting to temp_H with dimension [shape[0], xyz.m] of type tf.tensor 
     dims_H = temp_H.get_shape().as_list() 
     indices = [[i,j] for i in range(0, dims_H[0]) for j in range(xyz.k, xyz.k+dims_H[1])] 
     # indices is a list of indices to update in "result" 
     values = tf.reshape(temp_H, [-1]) # Values in temp_H as 1D list 
     delta = tf.SparseTensor(indices, values, shape) 
     result += tf.sparse_tensor_to_dense(delta) 
    return result 

現在我遇到的問題是在我計算indices行了,在那裏我遇到了錯誤

TypeError: 'NoneType' object cannot be interpreted as an integer

現在,我明白,這個錯誤意味着你不能迭代一個None類型的for循環,但是我的問題是測試集和訓練集對於batch_size具有不同的值。這意味着當我創建result時,第一個維度是未知的,這就是爲什麼它是None

但是,讓我有在result更新指標,我必須用一個for循環來生成這些值的列表送入delta其中我創建一個tf.SparseTensor因此它可以被添加到result

我的問題是,獲得指數的最佳方法是什麼?我曾嘗試用tf.placeholder(tf.int32)對象,而不是,在那裏我會再只是通過大小,當我運行會話替換dims_H[0]在for循環,但我得到的

TypeError: 'Tensor' object cannot be interpreted as an integer

任何幫助的錯誤,將不勝感激。

編輯:

僅供參考,這段代碼被稱爲按以下方式,其中M是一個預建新NN由具有tf.Variable值。

Y1 = tf.nn.relu(M.My_Function(A) + B1)

其中B1在該層偏移,以及A是輸入層。

EDIT2:

result應該是每一個My_Function被調用時零張量。但是,我懷疑它在每個函數調用中保留result的值。如果這是正確的,請讓我知道我需要做些什麼來改變這一點。

EDIT3:

當定義A它被定義爲

X1 = tf.placeholder(tf.float32, [None, 28, 28, 1]) 
A = tf.reshape(X1, [-1, 28*28]) 

作爲訓練數據和測試數據之間A變化的尺寸。

感謝先進!

回答

0

我只是嘗試這樣做

>>> range(None, 0) 
Traceback (most recent call last): 
    File "<pyshell#0>", line 1, in <module> 
    range(None, 0) 
TypeError: 'NoneType' object cannot be interpreted as an integer 

檢查​​不None

+0

不是。當'A'的尺寸固定時,我的代碼功能完美。但是,當尺寸固定時,我無法在測試和訓練數據上運行它。 – Cmertin

+0

問題來自'dim_H [0]'爲'None',這個值來自'shape [0]',它是'A'的第一維,它的類型爲'None'。 我已經添加了另一個編輯來顯示如何創建'A'。 – Cmertin