• tensorflow2 基础


    https://tf.wiki/

     https://github.com/snowkylin/tensorflow-handbook

    https://blog.csdn.net/lzs781/article/details/104742043/

    官网

    https://tensorflow.google.cn/tutorials/images/classification

    一、生成模型 , 为了增加训练的精确率,可以使 epochs 值变大

    import tensorflow as tf
    from tensorflow.keras.models import Sequential
    from tensorflow.keras.layers import Dense, Conv2D, Flatten, Dropout, MaxPooling2D
    import os
    import matplotlib.pyplot as plt
    
    
    #
    
    
    # 1. 训练路径
    PATH = r'C:UserswuhaoDesktopcats_and_dogs_filteredcats_and_dogs_filtered'
    train_dir = os.path.join(PATH, 'train')
    train_cats_dir = os.path.join(train_dir, 'cats')
    train_dogs_dir = os.path.join(train_dir, 'dogs')
    
    
    batch_size = 128
    epochs = 5
    IMG_HEIGHT = 150
    IMG_WIDTH = 150
    
    # 2.转化为生成器
    train_image_generator = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)
    train_data_gen = train_image_generator.flow_from_directory(batch_size=batch_size,
                                                               directory=train_dir,
                                                               shuffle=True,
                                                               target_size=(IMG_HEIGHT, IMG_WIDTH),
                                                               class_mode='binary')
    
    
    sample_training_images, _ = next(train_data_gen)
    
    
    # 3.展示图片(可有可无)
    def plot_images(images_arr):
        fig, axes = plt.subplots(1, 5, figsize=(20, 20))
        axes = axes.flatten()
        for img, ax in zip(images_arr, axes):
            ax.imshow(img)
            ax.axis('off')
        plt.tight_layout()
        plt.show()
    
    
    # 显示 5张 图片
    plot_images(sample_training_images[:5])
    
    # 4. 创建模型
    
    model = Sequential([
        Conv2D(16, 3, padding='same', activation='relu', input_shape=(IMG_HEIGHT, IMG_WIDTH ,3)),
        MaxPooling2D(),
        Conv2D(32, 3, padding='same', activation='relu'),
        MaxPooling2D(),
        Conv2D(64, 3, padding='same', activation='relu'),
        MaxPooling2D(),
        Flatten(),
        Dense(512, activation='relu'),
        Dense(1)
    ])
    
    
    # 5. 编译模型
    model.compile(
        optimizer='adam',
        loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
        metrics=['accuracy']
    )
    
    model.summary()
    
    
    # 6.训练模型
    num_cats_tr = len(os.listdir(train_cats_dir))
    num_dogs_tr = len(os.listdir(train_dogs_dir))
    total_train = num_cats_tr + num_dogs_tr
    history = model.fit_generator(
        train_data_gen,
        steps_per_epoch=total_train // batch_size,
        epochs=epochs,
    )
    # 7.训练结果可视化
    acc = history.history['accuracy']
    loss = history.history['loss']
    epochs_range = range(epochs)
    plt.figure(figsize=(8, 8))
    plt.subplot(1, 2, 1)
    plt.plot(epochs_range, acc, label='Training Accuracy')
    plt.legend(loc='lower right')
    plt.title('Training and Validation Accuracy')
    plt.subplot(1, 2, 2)
    plt.plot(epochs_range, loss, label='Training Loss')
    plt.legend(loc='upper right')
    plt.title('Training and Validation Loss')
    plt.show()
    
    # 9. 保存训练模型
    model.save('path_to_my_model.h5')

    2、加载模型

    import tensorflow as tf
    import os
    
    #
    
    batch_size = 128
    epochs = 5
    IMG_HEIGHT = 150
    IMG_WIDTH = 150
    PATH = r'C:UserswuhaoDesktopcats_and_dogs_filteredcats_and_dogs_filtered'
    validation_dir = os.path.join(PATH, 'validation')
    # 1.加载模型
    new_model = tf.keras.models.load_model('path_to_my_model.h5')
    
    new_model.summary()
    
    # 2.获取验证的生成器
    validation_image_generator = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)
    val_data_gen = validation_image_generator.flow_from_directory(batch_size=batch_size,
                                                                  directory=validation_dir,
                                                                  target_size=(IMG_HEIGHT, IMG_WIDTH),
                                                                  class_mode='binary')
    # 3.获取评估
    res = new_model.evaluate(val_data_gen)
    print(res)

     三、预测

    import tensorflow as tf
    import os
    import numpy as np
    from tensorflow.keras.preprocessing import image
    import cv2 as cv
    
    # 1.加载模型
    new_model = tf.keras.models.load_model('path_to_my_model.h5')
    
    
    # 3.评估
    # res = new_model.evaluate(val_data_gen)
    # print(res)
    
    tmp_path = r"C:UserswuhaoDesktopcats_and_dogs_filteredcats_and_dogs_filteredvalidationcatscat.2000.jpg"
    tmp1_path = r"C:UserswuhaoDesktopcats_and_dogs_filteredcats_and_dogs_filteredvalidationdogsdog.2001.jpg"
    img = image.load_img(tmp1_path, target_size=(150, 150))
    
    x = image.img_to_array(img)
    
    abc = x.reshape((1, 150, 150, 3))
    
    result = new_model.predict(abc)
    print(result)

     补充上面

    probability_model = tf.keras.Sequential([
        model,
        tf.keras.layers.Softmax()
    ])
    
    predictions = probability_model.predict(test_images)
    # 查看 index为 1 的图片
    print(np.argmax(predictions[1]))
    
    # 查看单张图片
    img = test_images[1]
    # 由(x, x) => (1, x, x)
    img = (np.expand_dims(img, 0))
    
    res = probability_model.predict(img)
    
    print(np.argmax(res))


    a = model.predict(img)
    print(np.argmax(a))
  • 相关阅读:
    文件上传中的错误文件上传及其命名
    播放音乐
    文件的读取与写入ASP.NET中常用代码之四(转载)
    Spring中文在线文档
    Css 图形
    离职进行时
    又面试了
    在Spring应用中创建全局获取ApplicationContext对象
    开始研究WEKA,一个开源java的数据挖掘工具
    收到SZ科技的录取通知,纠结是不是要去
  • 原文地址:https://www.cnblogs.com/wt7018/p/13073035.html
Copyright © 2020-2023  润新知