tensorflow算法实战:普通的数据训练和迁移学习之后的数据训练进行图像的识别(包括前端页面)

1.数据集的准备:

链接:https://pan.baidu.com/s/1rNmb_nxsBnoZqXT6pjsO-Q
提取码:0wmi

2.requirements.txt文件:

直接:pip install requirements.txt
链接:https://pan.baidu.com/s/1VcUOZtDyXlN5F-_kDudDJw
提取码:xpk3

3.文件结构:

在这里插入图片描述

4.预测效果:

在这里插入图片描述

5.首先普通的训练:

(1)导入相关的库函数:

import os
import cv2
import time
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow.keras import layers
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.models import load_model
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.callbacks import ModelCheckpoint,EarlyStopping,ReduceLROnPlateau
from tensorflow.keras.layers import Dense,Dropout,Flatten,BatchNormalization,Conv2D,MaxPool2D

(2)相关的变量的初始化:

#设置类别数,我们这里只训练了狗这个类别
num_classes=1
batch_size=4
img_h,img_w=224,224
#文件路径
train_data_dir='images/train'
valid_data_dir='images/valid'

(3)数据增强和导入文件:

#数据增强,对图像进行归一化
train_datagen=ImageDataGenerator(rescale=1./255)
validation_datagen=ImageDataGenerator(rescale=1./255)
#导入要训练的和验证文件中的数据
train_generate=train_datagen.flow_from_directory(
    train_data_dir,
    target_size=(img_h,img_w),
    batch_size=batch_size,
    class_mode='categorical',
    shuffle=True
)

validation_generate=validation_datagen.flow_from_directory(
    valid_data_dir,
    target_size=(img_h,img_w),
    batch_size=batch_size,
    class_mode='categorical',
    shuffle=True
)

(4)模型定义:

#模型定义
model=tf.keras.Sequential([
    #输入图像大小的设置
    layers.InputLayer(input_shape=(img_h,img_w,3)),

    layers.Conv2D(32,kernel_size=[3,3],strides=[1,1],padding='same'),
    layers.Activation('relu'),
    layers.BatchNormalization(),

    layers.Conv2D(32,kernel_size=[3,3],strides=[1,1],padding='same'),
    layers.Activation('relu'),
    layers.BatchNormalization(),
    layers.MaxPool2D(pool_size=[2,2]),

    layers.Conv2D(64,kernel_size=[3,3],strides=[1,1],padding='same'),
    layers.Activation('relu'),
    layers.BatchNormalization(),

    layers.Conv2D(64,kernel_size=[3,3],strides=[1,1],padding='same'),
    layers.Activation('relu'),
    layers.BatchNormalization(),
    layers.MaxPool2D(pool_size=[2,2]),

    layers.Conv2D(128,kernel_size=[3,3],strides=[1,1],padding='same'),
    layers.Activation('relu'),
    layers.BatchNormalization(),

    # layers.Flatten(),
    layers.GlobalAveragePooling2D(),
    layers.Dense(64),
    layers.Activation('relu'),
    layers.BatchNormalization(),
    layers.Dropout(0.5),

    layers.Dense(64),
    layers.Activation('relu'),
    layers.BatchNormalization(),
    layers.Dropout(0.5),

    layers.Dense(num_classes),
    layers.Activation('softmax'),
])

(5)相关回调函数定义:

#打印模型细节查看
model.summary()

#保存最优的模型
checkpoing=ModelCheckpoint(
    'model/recognitionDog.h5',
    monitor='val_loss',
    mode='min',
    save_best_only=True,
    save_weights_only=False,
    verbose=1
)
#当经过5代之后,验证集的损失值没有下降就提前终止训练
earlystop=EarlyStopping(
    monitor='val_loss',
    min_delta=0,
    patience=5,
    verbose=1,
    restore_best_weights=True
)
#当经过3代的训练之后验证集的损失值没有下降就学习衰减率
reduce_lr=ReduceLROnPlateau(
    monitor='val_loss',
    factor=0.8,
    patience=3,
    verbose=1,
    min_delta=0.0001
)

callbacks=[earlystop,checkpoing,reduce_lr]

(6)开始训练:

model.compile(
    loss='categorical_crossentropy',optimizer=Adam(lr=0.01),metrics=['accuracy']
)

epochs=20
history=model.fit(
    train_generate,
    steps_per_epoch=train_generate.n//batch_size,
    epochs=epochs,
    callbacks=callbacks,
    validation_data=validation_generate,
    validation_steps=validation_generate.n//batch_size
)

(7)画图:

x=range(1,len(history.history['accuracy'])+1)
plt.plot(x,history.history['accuracy'])
plt.plot(x,history.history['val_accuracy'])
plt.title('model accuracy')
plt.ylabel('Accuracy')
plt.xlabel('Epochs')
plt.xticks(x)
plt.legend(['Train','Val'],loc='upper left')
plt.savefig(fname='inception_v3.png',figsize=[10,10])
plt.show()

6.迁移学习训练:

(1)导入相关的库函数:

import os
import cv2
import time
import tensorflow
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow.keras import layers
from tensorflow.keras.models import Model
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.models import load_model
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.callbacks import ModelCheckpoint,EarlyStopping,ReduceLROnPlateau
from tensorflow.keras.layers import Dense,Dropout,Flatten,BatchNormalization,Conv2D,MaxPool2D

(2)相关的变量的初始化:

#设置类别数,我们这里只训练了狗这个类别
num_classes=1
batch_size=4
img_h,img_w=224,224
train_data_dir='images/train'
valid_data_dir='images/valid'

(3)数据增强和导入文件:

#数据增强,对图像进行归一化
train_datagen=ImageDataGenerator(rescale=1./255)
validation_datagen=ImageDataGenerator(rescale=1./255)
#导入要训练的和验证文件中的数据
train_generate=train_datagen.flow_from_directory(
    train_data_dir,
    target_size=(img_h,img_w),
    batch_size=batch_size,
    class_mode='categorical',
    shuffle=True
)

validation_generate=validation_datagen.flow_from_directory(
    valid_data_dir,
    target_size=(img_h,img_w),
    batch_size=batch_size,
    class_mode='categorical',
    shuffle=True
)

(4)迁移学习模型定义:

#模型定义
model_inception_v3=tensorflow.keras.applications.inception_v3.InceptionV3(weights='imagenet',include_top=False)
x=model_inception_v3.output
x=layers.GlobalAveragePooling2D()(x)
x=layers.Dense(1024,activation='relu')(x)
predications=layers.Dense(num_classes,activation='softmax')(x)
model_inception_V3=Model(inputs=model_inception_v3.input,outputs=predications)

#冻结住所有的层,因为我们这里的数据集很少,所以需要冻结这里的所有层
for layer in model_inception_V3.layers:
    layer.trainable=False

#打印模型细节查看
model_inception_V3.summary()

(5)相关回调函数定义:

#保存最优的模型
checkpoing=ModelCheckpoint(
    'model/recognitionDog_InceptionV3.h5',
    monitor='val_loss',
    mode='min',
    save_best_only=True,
    save_weights_only=False,
    verbose=1
)
#当经过5代之后,验证集的损失值没有下降就提前终止训练
earlystop=EarlyStopping(
    monitor='val_loss',
    min_delta=0,
    patience=5,
    verbose=1,
    restore_best_weights=True
)
#当经过3代的训练之后验证集的损失值没有下降就学习衰减率
reduce_lr=ReduceLROnPlateau(
    monitor='val_loss',
    factor=0.8,
    patience=3,
    verbose=1,
    min_delta=0.0001
)

callbacks=[earlystop,checkpoing,reduce_lr]

(6)开始训练:

epochs=20
history=model_inception_V3.fit(
    train_generate,
    steps_per_epoch=train_generate.n//batch_size,
    epochs=epochs,
    callbacks=callbacks,
    validation_data=validation_generate,
    validation_steps=validation_generate.n//batch_size
)

(7)画图:

x=range(1,len(history.history['accuracy'])+1)
plt.plot(x,history.history['accuracy'])
plt.plot(x,history.history['val_accuracy'])
plt.title('model accuracy')
plt.ylabel('Accuracy')
plt.xlabel('Epochs')
plt.xticks(x)
plt.legend(['Train','Val'],loc='upper left')
plt.savefig(fname='inception_v3.png',figsize=[10,10])
plt.show()

7.前端文件:

可以参考我这篇文章:
https://mydreamambitious.blog.csdn.net/article/details/123405384
注意:因为我这里训练的是一个类别,所以前端文件中的一些地方需要修改:
在这里插入图片描述
修改地方如下:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
修改如下:
在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值