Tensorflow2.0学习笔记-自制数据集及训练

该博客介绍了如何使用Python从本地文件创建MNIST数据集,包括训练集和测试集,对图片进行预处理并归一化。通过读取图片文件和对应标签,将数据转换为numpy数组,并进行了数据保存。之后,利用TensorFlow构建了一个简单的神经网络模型进行训练,并展示了训练过程和模型摘要。
摘要由CSDN通过智能技术生成

自制数据集及应用

本次使用mnist的图片做一个自制的数据集,其中在文件夹中存放需要用到的数据,包含了训练的60000张28 * 28的图片,和测试的10000张28 * 28图片。每个图片对应的有自己的标签。
 直接上代码:

import tensorflow as tf
from PIL import Image
import numpy as np
import os

train_path = './mnist_image_label/mnist_train_jpg_60000/'    #  训练集图片路径
train_txt = './mnist_image_label/mnist_train_jpg_60000.txt'  #  训练集标签文件
x_train_savepath = './mnist_image_label/mnist_x_train.npy'   #  训练集输入特征存储文件
y_train_savepath = './mnist_image_label/mnist_y_train.npy'   #  训练集标签存储文件

test_path = './mnist_image_label/mnist_test_jpg_10000/'      #  测试集图片路径
test_txt = './mnist_image_label/mnist_test_jpg_10000.txt'    #  测试集标签文件
x_test_savepath = './mnist_image_label/mnist_x_test.npy'     #  测试集特征存储文件
y_test_savepath = './mnist_image_label/mnist_y_test.npy'     #  测试集标签存储文件

#  函数功能:返回输入特征和标签
#  函数参数:输入图片的路径,和标签文件
def generateds(path, txt):
    f = open(txt, 'r')  # 以只读形式打开txt文件
    contents = f.readlines()  # 读取文件中所有行
    f.close()  # 关闭txt文件
    x, y_ = [], []  # 建立空列表
    for content in contents:  # 逐行取出
        value = content.split()  # 以空格分开,图片路径为value[0] , 标签为value[1] , 存入列表
        img_path = path + value[0]  # 拼出图片路径和文件名得到索引路径
        img = Image.open(img_path)  # 读入图片
        img = np.array(img.convert('L'))  # 图片变为8位宽灰度值的np.array格式
        img = img / 255.  # 数据归一化 (实现预处理)
        x.append(img)  # 归一化后的数据,贴到列表x
        y_.append(value[1])  # 标签贴到列表y_
        print('loading : ' + content)  # 打印状态提示

    x = np.array(x)  # 变为np.array格式
    y_ = np.array(y_)  # 变为np.array格式
    y_ = y_.astype(np.int64)  # 变为64位整型
    return x, y_  # 返回输入特征x,返回标签y_

#  判断所需要用到的参数是否已经存在了,如果存在了直接读取,如果不存在调用刚才的函数制作数据集。
if os.path.exists(x_train_savepath) and os.path.exists(y_train_savepath) and os.path.exists(
        x_test_savepath) and os.path.exists(y_test_savepath):
    print('-------------Load Datasets-----------------')
    x_train_save = np.load(x_train_savepath)
    y_train = np.load(y_train_savepath)
    x_test_save = np.load(x_test_savepath)
    y_test = np.load(y_test_savepath)
    x_train = np.reshape(x_train_save, (len(x_train_save), 28, 28))
    x_test = np.reshape(x_test_save, (len(x_test_save), 28, 28))
else:
    print('-------------Generate Datasets-----------------')
    x_train, y_train = generateds(train_path, train_txt)
    x_test, y_test = generateds(test_path, test_txt)
# 保存数据
    print('-------------Save Datasets-----------------')
    x_train_save = np.reshape(x_train, (len(x_train), -1))
    x_test_save = np.reshape(x_test, (len(x_test), -1))
    np.save(x_train_savepath, x_train_save)
    np.save(y_train_savepath, y_train)
    np.save(x_test_savepath, x_test_save)
    np.save(y_test_savepath, y_test)

model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics=['sparse_categorical_accuracy'])

model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1)
model.summary()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值