深度学习·猫狗识别实验 tensorflow 2.0

请添加图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
请添加图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
环境:Python 3.8.8 64-bit; VS Code; tensorflow 2.0
数据集:https://momodel.cn/explore/60e6b9babb5ba072ad72755d?type=dataset
文件结构:
在这里插入图片描述
使用GPU加速训练:
在这里插入图片描述
然而我的输出为0,只能用CPU,寄!

  • 卷积层和池化层的区别?

略。
卷积层主要提取图像特征(F不宜过大,否则参数数量过多),池化层用来缩放图像。

  • 卷积核的深度和个数?

在这里插入图片描述
train.py

from keras import layers, models, utils, optimizers
from keras.preprocessing.image import ImageDataGenerator
import tensorflow as tf
import os

def define_cnn_model():

    model = models.Sequential()
    # 卷积层
    model.add(layers.Conv2D(32, (3, 3), activation='relu', padding='same', input_shape=(200, 200, 3)))
    # 最大池化层
    model.add(layers.MaxPooling2D((2, 2)))
    # Flatten层
    model.add(layers.Flatten())
    # 全连接层
    model.add(layers.Dense(128, activation='relu'))
    model.add(layers.Dense(1, activation='sigmoid'))

    # 编译模型
    opt = optimizers.SGD(lr=0.03, momentum=0.9)
    model.compile(
        optimizer = opt,
        loss = 'binary_crossentropy',
        metrics = ['accuracy']
    )

    return model

def train_cnn_model():
    model = define_cnn_model()
    # 创建图片生成器
    datagen = ImageDataGenerator(rescale = 1.0 / 255.0)
    train_it = datagen.flow_from_directory(
        "ma1ogo3ushu4ju4ji2/dogs_cats/data/train",
        class_mode = 'binary',
        batch_size = 64,
        target_size = (200, 200)
    )
    model.fit_generator(train_it, steps_per_epoch=len(train_it), epochs=30, verbose=1)
    return model

print('文件当前路径:', os.getcwd())
print('开始训练')
model = train_cnn_model()
print('训练结束')
print('开始存储模型')
model.save('ma1ogo3ushu4ju4ji2/myModel.h5')
print('模型存储完毕')

test.py

import keras
import os, random
import matplotlib
from matplotlib.pyplot import imshow
import numpy as np
from PIL import Image
from keras.preprocessing import image

def read_random_image():
    folder = r"ma1ogo3ushu4ju4ji2/dogs_cats/data/test/"
    file_path = folder + random.choice(os.listdir(folder))
    pil_im = Image.open(file_path, 'r')
    return pil_im

def get_predict(pil_im, model):
    # 图片缩放
    pil_im = pil_im.resize((200, 200))
    # 将图片转为 numpy array 格式
    array_im = image.img_to_array(pil_im)
    array_im = np.expand_dims(pil_im, axis=0)
    # 对图片进行预测
    result = model.predict([[array_im]])
    if result[0][0] > 0.5:
        print('预测结果:狗')
    else:
        print('预测结果:猫')

# model = keras.models.load_model('ma1ogo3ushu4ju4ji2/myModel.h5')
model = keras.models.load_model("ma1ogo3ushu4ju4ji2/dogs_cats/model/basic_cnn_model.h5")
pil_im = read_random_image()
pil_im.show()
#imshow(image.img_to_array(pil_im))
get_predict(pil_im, model)

运行结果:
请添加图片描述
请添加图片描述
我的评价是:感觉不如瞎猜……准确度。

当然可以通过改进模型或者增大epochs来尝试提高accuracy,不过我没有GPU,就不折腾了,训练时间实在是太长了,代码一会上传到Github,大家有兴趣可以自己尝试。

>> Github传送门

  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
为进行TensorFlow 2.0的猫狗图像识别,你可以按照以下步骤进行操作。 首先,加载图像数据集并进行预处理。你可以使用TensorFlow自带的tf.image模块来加载和处理图像数据。你可以通过修改图像的对比度、裁剪、亮度等方式增加数据集的数量。这样做是因为神经网络处理的是图像的像素,当改变图像的条件时,图像矩阵的数值也会相应地发生变化,从而生成新的图像。下面是一个代码示例: ```python def load_preprocess_image(path,label): image = tf.io.read_file(path) image = tf.image.decode_jpeg(image,channels=3) image = tf.image.resize(image,[360,360]) image = tf.image.random_crop(image,[256,256,3]) image = tf.image.random_flip_left_right(image) image = tf.image.random_flip_up_down(image) image = tf.image.random_brightness(image,0.5) image = tf.image.random_contrast(image,0,1) image = tf.cast(image,tf.float32) image = image/255 label = tf.reshape(label,[1]) return image,label ``` 接下来,你可以将处理后的图像数据打包成张量,并将数据集的顺序打乱,以便进行训练。你可以使用tf.data.Dataset.from_tensor_slices函数将图像路径和标签转换成张量数据集。然后使用tf.data.Dataset.map函数应用load_preprocess_image函数进行图像加载和预处理。最后,使用shuffle和batch函数来打乱顺序和提取部分作为batch。代码如下: ```python train_image_ds = tf.data.Dataset.from_tensor_slices((train_image_path,train_image_label)) AUTOTUNE = tf.data.experimental.AUTOTUNE train_image_ds = train_image_ds.map(load_preprocess_image,num_parallel_calls=AUTOTUNE) train_image_ds = train_image_ds.shuffle(train_count).batch(BATCH_SIZE) train_image_ds = train_image_ds.prefetch(AUTOTUNE) ``` 这样,你就可以使用处理后的图像数据集进行猫狗图像识别的训练了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Tensorflow2.0实战练习之猫狗数据集(包含自定义训练和迁移学习)](https://blog.csdn.net/weixin_43938099/article/details/104481172)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你这个代码我看不懂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值