![](/img/trans.png)
[英]How can I use initialized layer weights in a keras custom regularizer?
[英]How can I deal with this code error which happens in my custom layer in Keras?
我想在Keras中創建一個自定義圖層。 在此示例中,我使用變量將張量相乘,但出現以下錯誤:
在/keras/engine/training_arrays.py,第304行中,在predict_loop中outs [i] [batch_start:batch_end] = batch_out ValueError:無法將輸入數組從形狀(36)廣播到形狀(2)中。
其實我已經檢查了這個文件,但是我什么也沒得到。 我的自定義層有問題嗎?
#the definition of mylayer.
from keras import backend as K
import keras
from keras.engine.topology import Layer
class mylayer(Layer):
def __init__(self, output_dim, **kwargs):
self.output_dim = output_dim
super(mylayer, self).__init__(**kwargs)
def build(self, input_shape):
self.kernel = self.add_weight(name = 'kernel',
shape=(1,),dtype='float32',trainable=True,initializer='uniform')
super(mylayer, self).build(input_shape)
def call(self, inputs, **kwargs):
return self.kernel * inputs[0]
def compute_output_shape(self, input_shape):
return (input_shape[0], input_shape[1])
#the test of mylayer.
from mylayer import mylayer
from tensorflow import keras as K
import numpy as np
from keras.layers import Input, Dense, Flatten
from keras.models import Model
x_train = np.random.random((2, 3, 4, 3))
y_train = np.random.random((2, 36))
print(x_train)
x = Input(shape=(3, 4, 3))
y = Flatten()(x)
output = mylayer((36, ))(y)
model = Model(inputs=x, outputs=output)
model.summary()
model.compile(optimizer='Adam',loss='categorical_crossentropy',metrics=['accuracy'])
model.fit(x_train, y_train, epochs=2)
hist = model.predict(x_train,batch_size=2)
print(hist)
print(model.get_layer(index=1).get_weights())
#So is there some wrong in my custom error?
特別是,當我訓練該網時,沒關系,但是當我嘗試使用“ prdict”時,這是錯誤的。
您的self.kernel * inputs[0]
形狀為(36,)
,但您的期望為(?,36)
。 更改:
def call(self, inputs, **kwargs):
return self.kernel * inputs
如果要輸出mylayer
的權重,則應設置index=2
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.