我有下面的代码,代表一个对抗模型。作为输入,它获取一个大小为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
都不是零,维度似乎都有很好的伸缩性
model.predict
取一个numpy数组,你有一个符号张量,你应该做的是:相关问题 更多 >
编程相关推荐