我定義了一個基于類的層。這一層的目的只是為輸入添加一個可學習的權重。通過這一層的輸入和輸出大小是相同的。當我構建模型時,發生了錯誤:
TypeError: Failed to convert object of type <class 'tuple'> to Tensor. Contents: (None, 256, 256). Consider casting elements to a supported type.
這是代碼(定義和呼叫)。
定義:
class Filter_low(Layer):
def __init__(self,**kwargs):
super(Filter_low, self).__init__(**kwargs)
def build(self, input_shape):
self.kernel = self.add_weight(name='kernel',
shape=input_shape,
initializer='uniform',
trainable=True)
super(Filter_low, self).build(input_shape)
def call(self, x):
return K.dot(x, self.kernel)
def compute_output_shape(self, input_shape):
return input_shape
叫法:
fre_dct = Input(shape=(256, 256))
fw_low = Filter_low(name='Filter_low')(fre_dct)
uj5u.com熱心網友回復:
嘗試像這樣改變input_shape你的kernel:
import tensorflow as tf
class Filter_low(tf.keras.layers.Layer):
def __init__(self,**kwargs):
super(Filter_low, self).__init__(**kwargs)
def build(self, input_shape):
output_dim = input_shape[-1]
self.kernel = self.add_weight(name='kernel',
shape=(output_dim, output_dim),
initializer='uniform',
trainable=True)
super(Filter_low, self).build(input_shape)
def call(self, x):
return tf.keras.backend.dot(x, self.kernel)
def compute_output_shape(self, input_shape):
return input_shape
fre_dct = tf.keras.Input(shape=(256, 256))
fw_low = Filter_low(name='Filter_low')(fre_dct)
model = tf.keras.Model(fre_dct, fw_low)
X = tf.random.normal((5, 256, 256))
y = tf.random.normal((5, 256, 256))
model.compile(optimizer='adam', loss='MSE')
model.fit(X, y, epochs=2)
或者,您可以設定shape=(input_shape[1:]).
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/341019.html
上一篇:如何修復InvalidArgumentError:logits和標簽必須是可廣播的:logits_size=[32,198]labels_size=[32,3]
