文章目录
*
– 1.数据集的准备:
– 2.requirements.txt文件:
– 3.文件结构:
– 4.预测效果:
– 5.首先普通的训练:
–
+ (1)导入相关的库函数:
+ (2)相关的变量的初始化:
+ (3)数据增强和导入文件:
+ (4)模型定义:
+ (5)相关回调函数定义:
+ (6)开始训练:
+ (7)画图:
– 6.迁移学习训练:
–
+ (1)导入相关的库函数:
+ (2)相关的变量的初始化:
+ (3)数据增强和导入文件:
+ (4)迁移学习模型定义:
+ (5)相关回调函数定义:
+ (6)开始训练:
+ (7)画图:
– 7.前端文件:
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
epochs=epochs,
callbacks=callbacks,
validation_data=validation_generate,
validation_steps=validation_generate.n
)
(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
epochs=epochs,
callbacks=callbacks,
validation_data=validation_generate,
validation_steps=validation_generate.n
)
(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
注意:因为我这里训练的是一个类别,所以前端文件中的一些地方需要修改:

修改地方如下:



修改如下:

Original: https://blog.csdn.net/Keep_Trying_Go/article/details/123883494
Author: Keep_Trying_Go
Title: tensorflow算法实战:普通的数据训练和迁移学习之后的数据训练进行图像的识别(包括前端页面)
相关阅读
Title: 4 Pandas 数据结构之生成DataFrame
目录
DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。
DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。


DataFrame 构造方法如下:
pandas .DataFrame (data ,index ,columns ,dtype ,copy )
参数说明:
data:一组数据(ndarray、series, map, lists, dict 等类型)。
index:索引值,或者可以称为行标签。
columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
dtype:数据类型。
copy:拷贝数据,默认为 False。
用 列表 生成 DataFrame
import pandas as pd
data = [['Google', 10], ['Runoob', 12], ['Wiki', 13]]
df = pd.DataFrame(data, columns=['Site', 'Age'], dtype=float)
print(df)

用 多维数组字典 生成 DataFrame
多维数组的长度必须相同。如果传递了索引参数,index 的长度必须与数组一致。如果没有传递索引参数,生成的结果是range(n),n 为数组长度。
import pandas as pd
data = {'Site': ['Google', 'Runoob', 'Wiki'], 'Age': [10, 12, 13]}
df = pd.DataFrame(data)
print(df)

用 Series字典 生成 DataFrame
import pandas as pd
data = {'one': pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
        'two': pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(data)
print(df)

用 列表字典 生成 DataFrame
import pandas as pd
data = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)
print(df)

用 元组字典 生成 DataFrame
元组字典可以自动创建多层索引 DataFrame。
import pandas as pd
df = pd.DataFrame({('a', 'b'): {('A', 'B'): 1, ('A', 'C'): 2},
                   ('a', 'a'): {('A', 'C'): 3, ('A', 'B'): 4},
                   ('a', 'c'): {('A', 'B'): 5, ('A', 'C'): 6},
                   ('b', 'a'): {('A', 'C'): 7, ('A', 'B'): 8},
                   ('b', 'b'): {('A', 'D'): 9, ('A', 'B'): 10}})
print(df)

缺失数据 :DataFrame 里的缺失值用 np.nan 表示。
Pandas 数据分析 – 学习笔记目录
Pandas 数据分析 – 学习笔记目录_YYDataV的博客-CSDN博客
Original: https://blog.csdn.net/lildkdkdkjf/article/details/122514690
Author: YYDataV数据可视化
Title: 4 Pandas 数据结构之生成DataFrame
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/302609/
转载文章受原作者版权保护。转载请注明原作者出处!