首页 > 其他分享 >使用卷积神经网络实现猫和狗的预测

使用卷积神经网络实现猫和狗的预测

时间:2023-05-15 17:23:40浏览次数:40  
标签:预测 卷积 batch 神经网络 train add import model size

1、导入相关库

    from keras.preprocessing.image import ImageDataGenerator

    import pathlib

    from tensorflow import keras

    from keras import layers

ImageDataGenerator的介绍

作用:通过实时数据增强生成批量图像数据向量。训练时该函数会无限循环生成数据,直到达到规定的epoch次数为止。

2、加载数据

    # 加载数据

    train_idg = ImageDataGenerator(rescale=1. / 255)

    valid_idg = ImageDataGenerator(rescale=1. / 255)

    new_base_dir = pathlib.Path("D:\大学\大学作业\学习文件\python深度学习\实验三    \cats_vs_dogs_small")

  •  Path:访问实际文件系统的“真正路径”,Path对象可用于判断对应的文件是否存在、是否为文件、是否为目录等。有两个子类,即PosixPath和WindowsPath,前者用于操作UNIX(包括 Mac OS X)风格的路径,后者用于操作Windows风格的路径。

    train_dataset = train_idg.flow_from_directory(

        new_base_dir / "train",

        target_size=(180, 180),

        batch_size=6,

    class_mode='binary')

    validation_dataset = valid_idg.flow_from_directory(

        new_base_dir / "validation",

        target_size=(180, 180),

        batch_size=6,

        class_mode='binary')

  • flow_from_directory(): 获取图像路径,生成批量增强数据。该方法只需指定数据所在的路径,而无需输入numpy形式的数据,也无需输入标签值,会自动返回对应的标签值。返回一个生成(x, y)元组的DirectoryIterator

    可以查看数据

    for i in train_dataset:

    print(i)

    查看数据格式

    for data_batch, labels_batch in train_dataset:

        print("data batch shape:", data_batch.shape)

        print("labels batch shape:", labels_batch.shape)

        break

3、构建模型

    from keras import models

    from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

    model = models.Sequential()

    model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(180, 180, 3)))

    model.add(MaxPooling2D((2,2)))

    model.add(Conv2D(64, (3, 3), activation='relu'))

    model.add(MaxPooling2D((2,2)))

    model.add(Conv2D(128, (3, 3), activation='relu'))

    model.add(MaxPooling2D((2,2)))

    model.add(Conv2D(128, (3, 3), activation='relu'))

    model.add(MaxPooling2D((2,2)))

    model.add(Flatten())

  • flatten():是对多维数据的降维函数。
  • flatten():默认缺省参数为0,也就是说flatten()和flatte(0)效果一样。
  • python里的flatten(dim)表示,从第dim个维度开始展开,将后面的维度转化为一维.也就是说,只保留dim之前的维度,其他维度的数据全都挤在dim这一维。

    model.add(Dense(512, activation='relu'))

    model.add(Dense(1, activation='sigmoid'))

    model.summary()

  • surmmary():能够保存训练过程以及参数分布图并在tensorboard显示

4、编译模型

    # 编译模型

    model.compile(loss="binary_crossentropy",

              optimizer="rmsprop",

              metrics=["accuracy"])

5、训练模型

    history = model.fit(

    train_dataset,epochs=30,validation_data=validation_dataset,steps_per_epoch=100,val    idation_steps=50)

 注意:

 #这里steps_per_epoch设置的是100,在上面中batch_size设置的是6,大小刚好

 # case 1

 #如果数据量小,batch_size设置比6大,则会报错

 # 因为train样本数是600(猫300,狗300),小于100*32
 # case 2
 # 如果上面train_generator的batch_size是6,如果这里steps_per_epoch=100,那么不会报错
 # 因为大小刚好
 # case 3
 # 如果上面train_generator的batch_size是7,如果这里steps_per_epoch=int(300/7),
 # 那么不会报错,但是会有警告,因为也是不整除
 # 不会报错因为int(300/7)*7< 600
 # case 4
 # 如果上面train_generator的batch_size是20,如果这里steps_per_epoch=100,照样报错
 # 因为20*100>600

6、训练精度,验证精度的可视化,绘制折线图

    import matplotlib.pyplot as plt

    plt.rcParams['font.sans-serif'] = ['SimHei']

    train_acc = history.history.get('accuracy')

    valid_acc = history.history.get('val_accuracy')

    data_x = range(1, len(train_acc) + 1)

    plt.plot(data_x, train_acc, color='red', label='训练精度')

    plt.plot(data_x, valid_acc, color='green', label='验证精度')

    plt.legend()  

 #显示标签

 plt.show()

标签:预测,卷积,batch,神经网络,train,add,import,model,size
From: https://www.cnblogs.com/beichens/p/17402522.html

相关文章