神经网络分类的简单练习:dogscats分类

目录

1.导入包:

2. 把猫狗图片分类

2.1下载数据集:train和test1

2.2进行猫狗分类

3.数据预处理

4.设计神经网络结构

5.训练模型:

6.训练结果分析:

7.模型预测:

完结撒花*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。


1.导入包:

import os
import numpy as np
import shutil
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
import matplotlib.pyplot as plt
from IPython.display import Image, display

2. 把猫狗图片分类

2.1下载数据集:train和test1

2.2进行猫狗分类

# 创建分类目录
train_dir = './data/dogs-vs-cats/train'
train_cats_dir = os.path.join(train_dir, 'cats')
train_dogs_dir = os.path.join(train_dir, 'dogs')

# 创建新的分类目录
os.makedirs(train_cats_dir, exist_ok=True)
os.makedirs(train_dogs_dir, exist_ok=True)

# 分类文件
for filename in os.listdir(train_dir):
    if filename.startswith('cat.'):
        shutil.move(os.path.join(train_dir, filename), os.path.join(train_cats_dir, filename))
    elif filename.startswith('dog.'):
        shutil.move(os.path.join(train_dir, filename), os.path.join(train_dogs_dir, filename))

3.数据预处理

# 数据目录
train_dir = './data/dogs-vs-cats/train'
test_dir = './data/dogs-vs-cats/test1'

# 图片尺寸
img_size = (128, 128)
batch_size = 32

# 数据生成器
train_datagen = ImageDataGenerator(rescale=1./255, validation_split=0.2)

train_generator = train_datagen.flow_from_directory(
    train_dir,
    target_size=img_size,
    batch_size=batch_size,
    class_mode='binary',
    subset='training'
)

validation_generator = train_datagen.flow_from_directory(
    train_dir,
    target_size=img_size,
    batch_size=batch_size,
    class_mode='binary',
    subset='validation'
)

这一步的运行结果:

4.设计神经网络结构

model = Sequential([
    Conv2D(32, (3, 3), activation='relu', input_shape=(128, 128, 3)),
    MaxPooling2D(pool_size=(2, 2)),
    # Conv2D(64, (3, 3), 
    # activation='relu'),
    # MaxPooling2D(pool_size=(2, 2)),
    Conv2D(128, (3, 3), activation='relu'),
    MaxPooling2D(pool_size=(2, 2)),

    
    Flatten(),
    Dense(512, activation='relu'),

    Dropout(0.5),
    
    Dense(1, activation='sigmoid')
])

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.summary()

这一步的运行结果:

5.训练模型:

history = model.fit(
    train_generator,
    steps_per_epoch=train_generator.samples // batch_size,
    validation_data=validation_generator,
    validation_steps=validation_generator.samples // batch_size,
    epochs=8
)

这一步的运行结果:

查看以下数据:

history.history
#查看下训练的数据,这些是会传递到下面的

6.训练结果分析:

def plot_history(history):
    #建个窗口
    plt.figure(figsize=(12, 4))

    plt.subplot(1, 2, 1)#一行两列的第一个

    plt.plot(history.history['accuracy'], label='train accuracy')#训练集的
    plt.plot(history.history['val_accuracy'], label='val accuracy')#验证集的
   
    plt.title('Accuracy')
    plt.xlabel('Epoch')
    plt.ylabel('Accuracy')
    plt.legend()

    plt.subplot(1, 2, 2)
    plt.plot(history.history['loss'], label='train loss')
    plt.plot(history.history['val_loss'], label='val loss')
    plt.title('Loss')
    plt.xlabel('Epoch')
    plt.ylabel('Loss')
    plt.legend()

    plt.show()

plot_history(history)

这一步的运行结果:

QAQ我都去掉一层卷积了,等我跑个30次试试看。

7.模型预测:

# 模型预测示例
test_image = tf.keras.preprocessing.image.load_img('./data/dogs-vs-cats/test1/1.jpg', target_size=img_size)

test_image = tf.keras.preprocessing.image.img_to_array(test_image)

test_image = np.expand_dims(test_image, axis=0)

test_image /= 255.0

prediction = model.predict(test_image)
if prediction[0] > 0.5:
    print("It's a dog!")
else:
    print("It's a cat!")

display(Image(filename='./data/dogs-vs-cats/test1/1.jpg'))

这一步的运行结果:

完结撒花*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值