当在作使用神经网络作分类(或回归)问题时,咱们倾向于选择较复杂的网络来提升准确率,可是复杂的网络会使得训练时间变很长。而若是咱们使用其余人已经训练好的模型来给咱们的任务作分类,须要训练的参数数量就会大大减小。
使用tf.keras.applacations能够轻松地进行迁移学习,下面用VGG19模型举例。python
由于输入VGG19的图片须要知足VGG19的要求,因此咱们要先对输入的图片进行预处理,其实就是对图片进行归一化处理。通常 image 的范围是[0, 255],通过预处理后,image 的范围会变成VGG19但愿输入的范围([-127.5, 127.5]),固然,不是全部网络都是这个范围,像GoogLeNet的输入范围就是[-1, 1]。web
image_pre = tf.keras.applications.vgg19.preprocess_input(image)
vgg = tf.keras.applications.VGG19(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, classes=1000)
prediction_probabilities = vgg(image_pre)
此时获得的数据形状为1x1000,即这张图片分别属于这1000个类别的几率。网络
predicted_top_5 = tf.keras.applications.vgg19.decode_predictions(prediction_probabilities.numpy())[0]
此时在导入VGG19时,不须要导入分类层(即全部全链接层)。app
vgg = tf.keras.applications.VGG19(include_top=False, weights='imagenet') vgg.trainable = False
vgg.trainable = False表示不对vgg中的参数进行训练。svg
model = tf.keras.Sequential([ vgg, tf.keras.layers.GlobalAveragePooling2D(), tf.keras.layers.Dense(1) ])
以后的训练过程就很常规了。学习