Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 忽略。。。在“%uuuu init”中具有参数的层必须重写“get\u config”`_Python_Tensorflow_Keras_Deep Learning_Conv Neural Network - Fatal编程技术网

Python 忽略。。。在“%uuuu init”中具有参数的层必须重写“get\u config”`

Python 忽略。。。在“%uuuu init”中具有参数的层必须重写“get\u config”`,python,tensorflow,keras,deep-learning,conv-neural-network,Python,Tensorflow,Keras,Deep Learning,Conv Neural Network,我正在使用以下课程定义的残差单元训练卷积神经网络(根据Aurelian Geron的“使用Scikit Learn、Keras和Tensorflow进行机器学习的实践”第478页) 创建类时没有错误,创建模型体系结构(使用该类)时没有错误: ResNet_model = tf.keras.models.Sequential() ResNet_model.add(tf.keras.layers.Conv2D(64, 3, strides=2, input_shape=num_pixels_and

我正在使用以下课程定义的残差单元训练卷积神经网络(根据Aurelian Geron的“使用Scikit Learn、Keras和Tensorflow进行机器学习的实践”第478页)

创建类时没有错误,创建模型体系结构(使用该类)时没有错误:

ResNet_model = tf.keras.models.Sequential()

ResNet_model.add(tf.keras.layers.Conv2D(64, 3, strides=2, input_shape=num_pixels_and_channels,
                                       padding="same", use_bias=False))


ResNet_model.add(tf.keras.layers.BatchNormalization())

ResNet_model.add(tf.keras.layers.Activation("relu"))

ResNet_model.add(tf.keras.layers.MaxPool2D(pool_size=3, strides=2, padding="same"))

prev_filters=64

for filters in [64] * 1 + [128] * 1 + [256] * 1 + [512] * 1:
    strides = 1 if filters == prev_filters else 2
    ResNet_model.add(ResidualUnit(filters, strides=strides))
    prev_filters=filters

ResNet_model.add(tf.keras.layers.GlobalAvgPool2D())
ResNet_model.add(tf.keras.layers.Flatten())
ResNet_model.add(tf.keras.layers.Dense(257, activation="softmax"))
…但当我训练模型时,训练一开始就会显示警告:

警告:tensorflow:模型未能序列化为JSON。忽略。。。在
\uuuu init\uuuu
中具有参数的层必须覆盖
get\u config

模型在第一个历元中进行训练,然后停止

什么是错误的,我需要在我的代码中更改什么来修复这个问题

我正在CPU上的Jupyter笔记本中运行tensorflow 2.1.0版。

我在我的layer类中跳过了get_config()函数,如下所示,它似乎解决了这个问题:

def get_config(self):
    cfg = super().get_config()
    return cfg    
更具体地说:

class AttentionBlock(tf.keras.layers.Layer):
def __init__(self,units = 32,**kwargs):
    super(AttentionBlock, self).__init__(**kwargs)
    self.units = units
    self.conv2d = tf.keras.layers.SeparableConv2D(self.units, 1,  padding='same',
                                  use_bias=True,
                                  kernel_initializer=tf.keras.initializers.VarianceScaling(), bias_initializer='zeros',
                                  bias_regularizer=None)
    self.relu = tf.keras.layers.Activation('swish')
    self.batchnorm = tf.keras.layers.BatchNormalization()


def get_config(self):
    cfg = super().get_config()
    return cfg    

def call(self,inputs):
  if type(inputs) is not list or len(inputs) <= 1:
        raise Exception('Merge must be called on a list of tensors '
                        '(at least 2). Got: ' + str(inputs))
  else:
      x,y = inputs
      w = self.conv2d(x)
      v = self.conv2d(y)
      out = self.relu(w + v)
      out = self.batchnorm(out)
      out = tf.nn.sigmoid(out)
      return out
class AttentionBlock(tf.keras.layers.Layer):
定义初始值(自身,单位=32,**kwargs):
超级(注意块,自我)。\uuuuu初始化(**kwargs)
self.units=单位
self.conv2d=tf.keras.layers.SeparableConv2D(self.units,1,padding='same',
使用_bias=True,
kernel_initializer=tf.keras.initializers.VarianceScaling(),bias_initializer='zeros',
偏差(正则化器=无)
self.relu=tf.keras.layers.Activation('swish')
self.batchnorm=tf.keras.layers.BatchNormalization()
def get_配置(自身):
cfg=super()
返回cfg
def呼叫(自我,输入):

如果类型(输入)不是list或len(输入),我实际上也面临类似的问题!我会试试看它是否适合我。我还没有机会再试试。我现在正在做另一个项目(我在两个月前发布了这个问题),刚刚在mo开始了一个新的工作,时间和空间都太短了。当我尝试你的答案时,我会在这里发表评论,如果它有效的话,我会接受它。
class AttentionBlock(tf.keras.layers.Layer):
def __init__(self,units = 32,**kwargs):
    super(AttentionBlock, self).__init__(**kwargs)
    self.units = units
    self.conv2d = tf.keras.layers.SeparableConv2D(self.units, 1,  padding='same',
                                  use_bias=True,
                                  kernel_initializer=tf.keras.initializers.VarianceScaling(), bias_initializer='zeros',
                                  bias_regularizer=None)
    self.relu = tf.keras.layers.Activation('swish')
    self.batchnorm = tf.keras.layers.BatchNormalization()


def get_config(self):
    cfg = super().get_config()
    return cfg    

def call(self,inputs):
  if type(inputs) is not list or len(inputs) <= 1:
        raise Exception('Merge must be called on a list of tensors '
                        '(at least 2). Got: ' + str(inputs))
  else:
      x,y = inputs
      w = self.conv2d(x)
      v = self.conv2d(y)
      out = self.relu(w + v)
      out = self.batchnorm(out)
      out = tf.nn.sigmoid(out)
      return out