Tensorflow:在我自己的图像上创建数据集/测试

2024-06-17 15:11:17 发布

您现在位置:Python中文网/ 问答频道 /正文

如何调整代码以从目录导入原始图像,然后训练和测试原始图像?你知道吗

我用train()、classify()和main()函数创建了一个程序。你知道吗

main()只询问是否要运行train()和classify()函数。你知道吗

train()导入指定的数据集(到目前为止,我使用了mnist手写数字和fashion\ mnist),设置训练模型,并保存模型。你知道吗

classify()加载train()保存的模型,洗牌图像,并遍历数据集进行预测。你知道吗

如果您在TensorFlow1.14上测试代码,它应该可以完美地工作。你知道吗

import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
from random import shuffle

data_set = tf.keras.datasets.fashion_mnist
model_data = 'fashion_mnist.model'
image_size = 28
class_names = {0:'t-shirt',1:'trouser',2:'pullover',3:'dress',4:'coat',5:'sandal',6:'shirt',7:'sneaker',8:'bag',9:'boot'}

def train():
    (train_images, train_labels), (test_images, test_labels) = data_set.load_data()
    train_images = tf.keras.utils.normalize(train_images, axis = 1) #makes data value 0-1
    test_images = tf.keras.utils.normalize(test_images, axis = 1) #makes data value 0-1

    model = tf.keras.models.Sequential()
    model.add(tf.keras.layers.Flatten(input_shape = (image_size, image_size))) #flattens image
    model.add(tf.keras.layers.Dense(128, activation = tf.nn.relu)) #amount of neurons
    model.add(tf.keras.layers.Dense(10, activation = tf.nn.softmax)) #probability distr

    model.compile(optimizer = 'adam', loss = 'sparse_categorical_crossentropy', metrics = ['accuracy'])
    model.fit(train_images, train_labels, epochs = 5)

    val_loss, val_acc = model.evaluate(test_images, test_labels)
    print(val_loss, val_acc)
    model.save(model_data)

def classify():
    (train_images, train_labels), (test_images, test_labels) = data_set.load_data()
    train_images = tf.keras.utils.normalize(train_images, axis = 1) #makes data value 0-1
    test_images = tf.keras.utils.normalize(test_images, axis = 1) #makes data value 0-1

    shuffle(test_images)

    predict = 0
    for images in test_images:
        plt.imshow(test_images[predict], cmap = plt.cm.binary)
        plt.show()

        new_model = tf.keras.models.load_model(model_data)
        predictions = new_model.predict([test_images])
        predict_class = class_names[np.argmax(predictions[predict])]
        print("\nprediction: ", predict_class)
        predict += 1

def main():
    run_train = int(input("\nrun training? yes:1 | no:0 "))
    if run_train == 1:
        train()
    else:
        pass

    classify_images = int(input("classify? yes:1 | no:0 "))
    if classify_images == 1:
        classify()
    else:
        pass

main()

我想修改代码,使变量“data\u set”指向一个目录,其中的子目录以类名称命名,例如

animals > dogs  > dog1.jpg, dog2.jpg ...
        > cats  > cat1.jpg, cat2.jpg ...
        > birds > bird1.jpg, bird2.jpg ...

每个jpg图像和标签数据都需要存储在一个与MNIST数据集类似的numpy数组中。所有这些可能都需要create\u data\u set()函数。你知道吗

最后,需要对classify()函数进行调整,以便对来自目录的原始图像进行测试。你知道吗

我知道这有很多要求。在过去的一周里,我尝试了几十个教程并阅读了大量的文档,但是在导入自定义图像数据集来训练tensorflow模型和测试图像分类器时,我不知所措。请帮助与任何信息,你有或我可以开始!谢谢您!你知道吗


Tags: 数据test图像datalabelsmodelmaintf