ฉันกำลังสร้างเลเยอร์ Convolutional แบบกำหนดเองโดย คลาสย่อย Keras Layer ฉันทำสิ่งนี้กับ Tensorflow เวอร์ชันก่อนหน้า และไม่ได้รับคำเตือน:
import tensorflow as tf
class MyCustomLayer(tf.Module):
def __init__(self, in_channels,
filters,
kernel_size,
padding,
strides,
activation,
kernel_initializer,
bias_initializer,
use_bias):
super(MyCustomLayer, self).__init__()
self.filters = filters
self.kernel_size = kernel_size
self.activation = activation
self.padding = padding
self.kernel_initializer = kernel_initializer
self.bias_initializer = bias_initializer
self.strides = strides
self.use_bias = use_bias
self.in_channels = in_channels
self.w = tf.Variable(
initial_value=self.kernel_initializer(shape=(*self.kernel_size,
in_channels,
self.filters),
dtype='float32'), trainable=True)
if self.use_bias:
self.b = tf.Variable(
initial_value=self.bias_initializer(shape=(self.filters,),
dtype='float32'),
trainable=True)
def __call__(self, inputs, training=None):
x = tf.nn.conv2d(inputs,
filters=self.w,
strides=self.strides,
padding=self.padding)
if self.use_bias:
x = tf.add(x, self.b)
x = self.activation(x)
return x
x = tf.keras.Input(shape=(28, 28, 3))
y = MyCustomLayer(
in_channels=3,
filters=16,
kernel_size=(3, 3),
strides=(1, 1),
activation=tf.nn.relu,
padding='VALID',
kernel_initializer=tf.initializers.GlorotUniform(),
bias_initializer=tf.initializers.Zeros(),
use_bias=True)(x)
model = tf.keras.Model(inputs=x, outputs=y)
ฉันได้รับคำเตือนนี้ด้วย tf.__version__ == 2.4.1
:
คำเตือน: เทนเซอร์โฟลว์: ตัวแปรต่อไปนี้ใช้การเรียกของเลเยอร์ Lambda (tf.compat.v1.nn.conv2d_12) แต่ไม่มีอยู่ในออบเจ็กต์ที่ถูกติดตาม: ‹tf.Variable 'Variable:0' shape=(3, 3, 3, 16) dtype=float32› อาจเป็นไปได้ว่านี่เป็นพฤติกรรมที่ตั้งใจไว้ แต่มีแนวโน้มว่าจะเป็นการละเลยมากกว่า นี่เป็นข้อบ่งชี้ที่ชัดเจนว่าเลเยอร์นี้ควรถูกกำหนดให้เป็นเลเยอร์ย่อยแทนที่จะเป็นเลเยอร์ Lambda
คำเตือน: เทนเซอร์โฟลว์: ตัวแปรต่อไปนี้ใช้การเรียกของเลเยอร์ Lambda (tf.math.add_2) แต่ไม่มีอยู่ในออบเจ็กต์ที่ถูกติดตาม: ‹tf.Variable 'Variable:0' shape=(16,) dtype=float32› It เป็นไปได้ว่านี่เป็นพฤติกรรมที่ตั้งใจไว้ แต่มีแนวโน้มที่จะเป็นการละเลยมากกว่า นี่เป็นข้อบ่งชี้ที่ชัดเจนว่าเลเยอร์นี้ควรถูกกำหนดให้เป็นเลเยอร์ย่อยแทนที่จะเป็นเลเยอร์ Lambda
สิ่งนี้หมายความว่า? ฉัน กำลัง ใช้เลเยอร์ย่อย