深度学习day05-利用TensorFlow搭建图像分类感知机模型,并使用模型进行图片分类

今天在之前的基础上开始真正的进行图像分类了,如果有看不懂的地方,请翻看之前的文章。

目录

图片处理

模型搭建

模型使用


开始之前,先导入我们需要用到的包,绝大部分都在之前介绍过:

import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
import cv2
import os
from glob import glob
from tensorflow.keras import datasets,layers,optimizers,losses,models
from PIL import Image

图片处理

做图像分类模型,目的是要让机器来识别记忆图像的特征,所以输入的图片要先进行预处理,调整好统一的大小,格式。

首先写一个函数,将每一张图片转成我们需要的数组格式:

def read_image(img_path,shape):
    plt_img = Image.open(img_path)
    np_img = np.array(plt_img,dtype=np.uint8)
    np_img = cv2.resize(np_img,shape)
    return np_img

之后我们在图片路径下读取图片,用read_image来处理每一张图片:

folders = os.listdir("seg_train")//文件路径
type_dict = {}
imgs = []
labs = []
for i,type_name in enumerate(folders)://处理图片与标签
    type_dict[i] = type_name
    images = glob(os.path.join('seg_train',type_name,'*.jpg'))
    labels = [i] * len(images)
    imgs = [*imgs,*images]
    labs = [*labs,*labels]


//X是图片矩阵,Y是对应的标签数值
X_train = np.zeros([len(imgs),50,50,3])
for index,img_path in enumerate(imgs):
    X_train[index,:,:,:] = read_image(img_path,(50,50))

Y_train = np.zeros([len(labs),len(folders)])
for i in range(len(labs)):
    Y_train[i,labs[i]] = 1.0

X_train =np.reshape(X_train,[X_train.shape[0],50*50*3])

运行结果:

模型搭建

建立一个model,没有太多的技巧,使用的全是全连接层,

最后一层的结果6: 对应的是我有6种图像类型

具体的含义之前都有解释,这里直接上代码:

model = tf.keras.Sequential([
    # layers.Dense(67500, activation='relu'),
    # layers.Dense(50000,activation='relu'),
    # layers.Dense(25000, activation='relu'),
    # layers.Dense(12500,activation='relu'),
    # layers.Dense(7500, activation='relu'),
    layers.Dense(2500,activation='relu'),
    layers.Dense(1500,activation='relu'),
    layers.Dense(700,activation='relu'),
    layers.Dense(300,activation='relu'),
    layers.Dense(100,activation='relu'),
    layers.Dense(6,activation='softmax')
])

//定义优化、损失
opt = optimizers.SGD(learning_rate=0.001)
loss = losses.CategoricalCrossentropy()

model.build(input_shape=[None,7500])
model.compile(optimizer=opt,loss=loss,metrics=['accuracy'])
model.fit(x=X_train,y=Y_train,batch_size=100,epochs=25,shuffle=True)

model.save('model.h5')

跑一下,顺便保存一个模型,方便我们一会使用:

这台电脑没有GPU,不是不能运行,就是速度太慢了。 

模型使用

使用也很简单,我们把保存的模型加载回来,输入一张照片,就可以判断了


model = tf.keras.models.load_model('model.h5')
# model = tf.keras.models.load_model
tmp_img = np.reshape(img,[1,-1])

pr_lab = model(tmp_img,training=False)
pr_lab = np.array(pr_lab)
pr_lab = np.argmax(pr_lab)
print(type_dict[pr_lab])

plt.figure()
plt.imshow(img)
plt.title(type_dict[pr_lab])
plt.show()

看一下结果:

 让我们看看这张照片究竟是不是山呢:

 看来效果还不错。

猜你喜欢

转载自blog.csdn.net/qq_52213943/article/details/123890873