Tensorflow 子类化序贯模型
为了能够编写自定义的Tensorflow 子类化序贯模型,tensorflow,keras,Tensorflow,Keras,为了能够编写自定义的call()并处理命名的输入,我想对序列模型进行子类化。然而,对于我来说,\uuuu init\uuu函数的微小更改已经导致了一些意想不到的行为。如果我尝试在调用super()后向子类添加新成员并初始化它。\uuu init\uuuu()模型将无法自动生成 from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, Activation, MaxPooli
call()
并处理命名的输入,我想对序列模型进行子类化。然而,对于我来说,\uuuu init\uuu
函数的微小更改已经导致了一些意想不到的行为。如果我尝试在调用super()后向子类添加新成员并初始化它。\uuu init\uuuu()
模型将无法自动生成
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, Activation, MaxPooling2D, Dense, Flatten
import tensorflow as tf
class Sequential2(Sequential):
def __init__(self):
super(Sequential2, self).__init__()
self.custom_member = []
def get_my_custom_member(self):
return self.custom_member
model = Sequential2()
if tf.keras.backend.image_data_format() == 'channels_first':
input_shape = (1, 28, 28)
else:
assert tf.keras.backend.image_data_format() == 'channels_last'
input_shape = (28, 28, 1)
layers = [Conv2D(32, (3, 3), input_shape=input_shape)]
for layer in layers:
model.add(layer)
model.add(Dense(10))
model.add(Activation('relu'))
model.summary()
输出失败:ValueError:此模型尚未生成。首先通过调用`Build()`或调用`fit()`和一些数据来构建模型,或者在第一层中指定一个`input_shape`参数进行自动构建。
但是,如果省略了self.custom_member=[]
,它将按预期工作
我错过了什么?(使用Tensorflow 1.14进行测试)此问题已在TF 2.2中修复。您可以参考如下所示的工作代码
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, Activation, MaxPooling2D, Dense, Flatten
import tensorflow as tf
print(tf.__version__)
class Sequential2(Sequential):
def __init__(self):
super(Sequential2, self).__init__()
self.custom_member = []
def get_my_custom_member(self):
return self.custom_member
model = Sequential2()
if tf.keras.backend.image_data_format() == 'channels_first':
input_shape = (1, 28, 28)
else:
assert tf.keras.backend.image_data_format() == 'channels_last'
input_shape = (28, 28, 1)
layers = [Conv2D(32, (3, 3), input_shape=input_shape)]
for layer in layers:
model.add(layer)
model.add(Dense(10))
model.add(Activation('relu'))
model.summary()
输出:
2.2.0
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d (Conv2D) (None, 26, 26, 32) 320
_________________________________________________________________
dense (Dense) (None, 26, 26, 10) 330
_________________________________________________________________
activation (Activation) (None, 26, 26, 10) 0
=================================================================
Total params: 650
Trainable params: 650
Non-trainable params: 0
_________________________________________________________________
甚至不要使用TF2.2(我也遇到了类似的问题)。[背景]