Подать тензор к модели - PullRequest
0 голосов
/ 19 января 2020

У меня есть следующий код, представляющий состязательную модель. В качестве входных данных требуется изображение размером 150x150x3 и модель для рекламы. Основная идея c состоит в том, чтобы добавить некоторый шум к изображению и затем прогнозировать, используя заданное значение 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 () должен быть строкой, байтовоподобным объектом или числом, а не NoneType

В чем причина этой ошибки и как ее избежать в будущем? Ни img, ни classifier_model не равны, размеры кажутся хорошо масштабированными.

1 Ответ

1 голос
/ 20 января 2020

model.predict принимает массив numpy, у вас есть символ c тензор, что вы должны сделать:

output = classifier_model(x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...