向模型输入张量

2024-06-16 12:26:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的代码,代表一个对抗模型。作为输入,它获取一个大小为150x150x3的图像和一个要发布的模型。基本思想是给图片添加一些噪声,然后使用给定的classifier_model进行预测

def build_adversarial_model(img, classifier_model):

  get_custom_objects().update({'clip': layers.Activation(clip)})

  for layer in classifier_model.layers:
    layer.trainable = False
  image = layers.Input(name='original_image',
                       shape=img.shape)
  one = layers.Input(shape=(1,), name='unity')

  noise = layers.Dense(units=150,
                       activation=None,
                       use_bias=False,
                       kernel_initializer='random_normal',
                       kernel_regularizer=l2(.1),
                       name='adversarial_noise'
                       )(one)

  res = layers.Reshape(img.shape, name='reshape')(noise)
  x = layers.Add(name='add')([image, res])

  # Clip values to be within 0 and 1
  x = layers.Activation('clip')(x)
  output = classifier_model.predict(x)
  adversarial_model = Model(inputs=[image, one],
                            outputs=[output])
  adversarial_model.compile(optimizer=Adam(learning_rate=0.01), loss='categorical_crossentropy', metrics='accuracy')

  return adversarial_model

def clip(x):
  '''Custom activation function for clipping adversarial pixel values.'''
  return K.clip(x, 0., 1.)

它在output = classifier_model.predict(x)失败,说:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

是什么原因导致此错误?我以后如何避免此错误?无论是img还是classifier_model都不是零,维度似乎都有很好的伸缩性


Tags: name模型imageimgoutputclipmodellayers