Tensorflow Transfer Learning (迁移学习) ---云端部署代码方式

最近再用迁移学习做一些东西,但是发现Transfer Learning有好几种写法,且不同的写法,再最后deploy (部署)的时候,会出现不同的问题。,本文先介绍云端部署方式

云端部署推理(inference) 

这种方式自由度应该是最高的,所以写法比较自由,可以相对简单。用model.summary()的时候,看不到被迁移的模型的细节,只有一个keras_layer 如果用resnet50 作为迁移方,那么这个位置就是resnet50,并没有resnet50里面的具体细节。

Tensorflow Transfer Learning (迁移学习) ---云端部署代码方式_第1张图片

代码如下: 

import tensorflow as tf
import tensorflow_hub
import numpy as np
######################载入数据######################
Image_size = 224
Batch_size = 64
datagen = tf.keras.preprocessing.image.ImageDataGenerator(
    rescale=1. / 255,
    validation_split=0.2
)

train_data = datagen.flow_from_directory(
    'flower_photos/',
    target_size=(Image_size, Image_size),
    batch_size=Batch_size,
    subset='training'
)

test_data = datagen.flow_from_directory(
    'flower_photos/',
    target_size=(Image_size, Image_size),
    batch_size=Batch_size,
    subset='validation'
)


######################载入模型&re-train模型######################
model_url = 'D:\Resource\Learning_Tensorflow\learning_savedmodel\efficientnet_b0_feature-vector_1'

feature_extractor_layer = tensorflow_hub.KerasLayer(
    model_url,
    input_shape=(Image_size, Image_size, 3)
)
feature_extractor_layer.trainable = False

model = tf.keras.models.Sequential([feature_extractor_layer,
                                    tf.keras.layers.Dense(train_data.num_classes,
                                                         activation='softmax')])

model.summary()
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['acc'])

steps_per_epoch = np.ceil(train_data.samples / train_data.batch_size)
print(steps_per_epoch)
history = model.fit(train_data, epochs=5, steps_per_epoch=steps_per_epoch)


######################预测并且评估结果######################
class_names = sorted(test_data.class_indices.items(),
                     key=lambda pair: pair[1])
print(class_names)
class_names = np.array([key.title() for key, value in class_names])
print(class_names)

# for image_batch, label_batch in test_data:
#     predicted_batch = model.predict(image_batch)
#     predicted_id = np.argmax(predicted_batch, axis=-1)
#     predicted_label_batch = class_names[predicted_id]
loss, accuracy = model.evaluate(test_data)
tf.keras.models.save_model(model, 'flower_model/')
print(loss, accuracy)


 上述生成的模型也可以转成tflite 

######################输出成TFlite######################
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()

with open('flower.tflite', 'wb') as f:
      f.write(tflite_model)

注意这里面训练数据文件夹是这样的flower_photo ,每个种类的数据放在一个文件夹下。

Tensorflow Transfer Learning (迁移学习) ---云端部署代码方式_第2张图片

 

你可能感兴趣的:(tensorflow2.x,tensorflowlite,tensorflow,迁移学习,深度学习)