关于tensorflow迁移学习那些事

本文重点介绍如何在TensorFlow中使用自训练的模型进行迁移学习和微调。步骤包括保存预训练模型、加载模型以及在加载后添加新层进行微调。通过model.save_weights()函数保存模型,然后加载模型权重,继续训练以适应新任务需求。
摘要由CSDN通过智能技术生成

首先在看本内容之前,推荐你去看tensorflow官网的迁移学习和微调,那个讲的更清楚,也更加详细,网址如下所示。但是官网里面的模型加载确实在网络上下载的,不能符合实际的需求,因为有些情况,我们想用自己预训练的模型加载并且进行微调,那么就是本内容的重点。https://tensorflow.google.cn/guide/keras/transfer_learning?hl=zh_cn

大致的内容步骤如下

1、保存自己预训练的模型

2、加载自己的模型

3、进行微调

那么首先第一步,保存自己与训练的模型

我们首先应该调用model.save_weights()这个函数,保存自己的模型。数据集自自己调整下。

import tensorflow as tf
import numpy as np
from tensorflow.keras.layers import Conv1D,BatchNormalization,Dense,Activation,GlobalAveragePooling1D
from tensorflow.keras.regularizers import l2


auto_train_x_a = np.load("U_process_train_x.npy")[0:30,:]
auto_train_y = np.load("auto_process_data_train_y.npy")[0:30,:]

def auto():
    x_input = tf.keras.Input(shape=(128,))
    x1 = tf.keras.layers.Dense(128,kernel_regularizer=tf.keras.regularizers.l2(1e-4))(x_input)
    x2 = tf.keras.layers.Dense(32
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用TensorFlow进行迁移学习时,可以使用预训练的ResNet-50模型作为基础模型,并在其基础上进行微调。以下是一个基于TensorFlow的完整代码示例: ```python import tensorflow as tf from tensorflow import keras # 加载预训练模型 base_model = keras.applications.ResNet50(weights='imagenet', include_top=False, input_shape=(224, 224, 3)) # 冻结预训练模型的权重 for layer in base_model.layers: layer.trainable = False # 添加自定义的分类器层 x = base_model.output x = keras.layers.GlobalAveragePooling2D()(x) x = keras.layers.Dense(256, activation='relu')(x) predictions = keras.layers.Dense(num_classes, activation='softmax')(x) # 创建完整的模型 model = keras.models.Model(inputs=base_model.input, outputs=predictions) # 编译模型 model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # 数据准备和增强 train_datagen = keras.preprocessing.image.ImageDataGenerator( rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True) test_datagen = keras.preprocessing.image.ImageDataGenerator(rescale=1./255) train_generator = train_datagen.flow_from_directory( train_data_dir, target_size=(224, 224), batch_size=batch_size, class_mode='categorical') validation_generator = test_datagen.flow_from_directory( validation_data_dir, target_size=(224, 224), batch_size=batch_size, class_mode='categorical') # 训练模型 model.fit( train_generator, steps_per_epoch=train_steps_per_epoch, epochs=num_epochs, validation_data=validation_generator, validation_steps=validation_steps_per_epoch) # 评估模型 test_generator = test_datagen.flow_from_directory( test_data_dir, target_size=(224, 224), batch_size=batch_size, class_mode='categorical', shuffle=False) scores = model.evaluate(test_generator) print(f'Test loss: {scores[0]}') print(f'Test accuracy: {scores[1]}') ``` 请注意,上述代码中的数据集路径、类别数量、训练轮数、批次大小等需要根据您的具体情况进行适当修改。此代码将在训练集上微调预训练的ResNet-50模型,并在验证集和测试集上评估性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值