ImageNet图像分类任务(读取本地文件)

ImageNet图像分类任务(读取本地文件)

1.准备工作:从CSDN下载mini-ImageNet数据集,选取5个大类,每个600张图片。本人选取的是‘jellyfish’, ‘snake’, ‘spider’, ‘toucan’, ‘triceratops’这五类。在项目文件夹下创建‘data’文件夹,文件夹下包含‘jellyfish’, ‘snake’, ‘spider’, ‘toucan’, ‘triceratops’五个子文件,每个子文件包含对应600张图片。
在这里插入图片描述
2.读取本地数据为对应的 X_train, Y_train, X_test, Y_test,并以‘.npy’格式保存于’.npz’文件中,备用:

import glob#glob是python自带的一个操作文件的相关模块,由于模块功能比较少,所以很容易掌握。用它可以查找符合特定规则的文件路径名。使用该模块查找文件,只需要用到: “*,?,[]”这三个匹配符;
import os
import cv2 #图像处理库
import numpy as np
import random
import tensorflow as tf
from tensorflow import keras

def Data_Generation():
    X_data = [];Y_data = []
    path_data = [];path_label = []

    files = os.listdir('data')#os.listdir()用于返回一个由文件名和目录名组成的列表

    for file in files:
        print(file)
        for path in glob.glob('data/' + file + '/*.*'):#返回所有匹配的文件路径列表。它只有一个参数pathname,定义了文件路径匹配规则,这里可以是绝对路径,也可以是相对路径。
            if 'jpg' or 'png' or 'jpeg' in path:
                path_data.append(path)

    random.shuffle(path_data)#打乱文件

    for paths in path_data:#生成标签
        if 'jellyfish' in paths:
            path_label.append(0)
        elif 'snake' in paths:
            path_label.append(1)
        elif 'spider' in paths:
            path_label.append(2)
        elif 'toucan' in paths:
            path_label.append(3)
        elif 'triceratops' in paths:
            path_label.append(4)

        img = cv2.imread(paths)
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        img = cv2.resize(img, (64, 64))
        X_data.append(img)

    L = len(path_data)
    Y_data = path_label
    X_data = np.array(X_data, dtype=float)
    Y_data = np.array(Y_data, dtype='uint8')
    X_train = X_data[0:int(L * 0.8)]#训练数据分配
    Y_train = Y_data[0:int(L * 0.8)]
    X_test = X_data[int(L * 0.8):]#测试数据分配
    Y_test = Y_data[int(L * 0.8):]
    return X_train, Y_train, X_test, Y_test, L


X_train, Y_train, X_test, Y_test, L = Data_Generation()
np.savez(os.path.join('data', 'data.npz'), X_train=X_train, Y_train=Y_train, X_test=X_test, Y_test=Y_test)
#np.savez保存多个数组到一个文件中,保存格式为'.npz',该文件含有多个'.npy‘格式的文件
#os.path.join('data', 'data.npz')用于拼接'data', 'data.npz'

3.下载所保存的’.npz’数据并调用,建立简单的‘顺序‘’全连接神经网络。

import tensorflow as tf
from tensorflow import keras
import numpy as np
print(tf.__version__)

# 数据加载
data = np.load('G:\\python2\\pythonProject6\\data\\data.npz')#下载所保存的数据
X_train = data['X_train']
Y_train = data['Y_train']
X_test = data['X_test']
Y_test = data['Y_test']

X_train = X_train / 255.0
X_test = X_test / 255.0

# 网络搭建设置
model = keras.Sequential([
    keras.layers.Flatten(input_shape=(64, 64, 3)),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(5)
])#搭建顺序结构网络

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])
# 网络并测试网络
model.fit(X_train,Y_train, epochs=15)
model.evaluate(X_test,Y_test, verbose=2)
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值