IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 机器学习——从0开始构建自己的深度学习网络 -> 正文阅读

[人工智能]机器学习——从0开始构建自己的深度学习网络

目录

前言

第一步 软件安装——anaconda,pycharm

第二步 工具安装

?第三步 Jupyterlab的使用

?第四步 正式开始

1. 文件展示

2. 代码(一)——图片读取

?3. 代码(二)——图片输出

??4. 代码(三)——数据预处理以及网络搭建

??5. 代码(四)——验证分类结果

?总结


前言

本文仅作为经验分享以及学习记录,如有问题,可以在评论区和我讨论。

理论知识暂且不讲,待有时间了我就会慢慢分享理论知识,目前就整点干货,直接上代码,怎么从零开始构建自己的神经网络。

本项目Github地址

第一步 软件安装——anaconda,pycharm

正所谓工欲善其事必先利其器,既然要构建深度学习网络,那么我们就要安装我们的“工具”,这里我选择的是anaconda,和pycharm。具体的安装方法,请参考:

1.? anaconda安装方法

2.? pycharm安装方法

第二步 工具安装

多数神经网络代码,是.ipynb格式文件,所以我选择的运行工具是,anaconda里面的,Jupyterlab\Jupyter Notebook,这两个一样,没差什么功能,就是Jupyterlab美观一些。

安装方法:

?切换自己的环境,然后点击Jupyterlab\Jupyter Notebook的install。等待之后就好了。

关于如何更改Jupyterlab\Jupyter Notebook的起始文档位置,切换Jupyterlab\Jupyter Notebook启动浏览器,添加快捷方式等。都可以在网上查到,有时间我也会整理一下,发布出来。

?启动之后浏览器会跳转到这个页面,这个就是Jupyterlab:

?第三步 Jupyterlab的使用

这一部分简单介绍一下,Jupyterlab的使用方法。

1.新建文件:点击加号,选择notebook即可。

?2.简单功能:

上面红框依次是:保存、增加cell、剪切、复制、粘贴、运行、暂停、重置。

右侧红框依次是:复制当前cell并粘贴到本cell下方、cell上移、cell下移、上方加cell、下方加cell、删除cell。

? 3.快捷键:

  • ?Ctrl+Enter:运行此cell,不跳转到下一个cell
  • ?Shi+Enter:运行此cell,跳转到下一个cell

选中cell前面的 [ ]:

  • X 删除选中的cell
  • M ,然后运行cell,将当前cell变成文本(个人理解,有误望指出)

?第四步 正式开始

这里我们直接开始,直接上代码,通过代码,一方面有助于我梳理本次学习思路,二是我觉得这样更直接明了一些,毕竟动手才有趣。

1. 文件展示

?

?

?每个cats、dogs文件夹下都是 猫or狗 图片

2. 代码(一)——图片读取

import os
# import zipfile
dog_dir = os.path.join('F:/tmp/cat_dog/training/dogs')
cat_dir = os.path.join('F:/tmp/cat_dog/training/cats')

print('total training dog images:', len(os.listdir(dog_dir)))
print('total training cat images:', len(os.listdir(cat_dir)))    # 计算路径下有多少文件

dog_files = os.listdir(dog_dir)            # 获取路径下所有文件
print(dog_files[:10])                        # 列出前十个文件名

cat_files = os.listdir(cat_dir)
print(cat_files[:10])

cell运行结果:?

total training dog images: 8000
total training cat images: 8000
['0.jpg', '1.jpg', '10.jpg', '100.jpg', '1000.jpg', '1001.jpg', '1002.jpg', '1004.jpg', '1005.jpg', '1006.jpg']
['0.jpg', '1.jpg', '10.jpg', '100.jpg', '1000.jpg', '1001.jpg', '1002.jpg', '1003.jpg', '1004.jpg', '1005.jpg']

?可以看到当前目录下共8000个文件,与结果符合。

?3. 代码(二)——图片输出

%matplotlib inline

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

pic_index = 2            # 输出几张图片

next_dog = [os.path.join(dog_dir, fname) 
                for fname in dog_files[pic_index-2:pic_index]]
next_cat = [os.path.join(cat_dir, fname) 
                for fname in cat_files[pic_index-2:pic_index]]

for i, img_path in enumerate(next_dog+next_cat):            #输出图片
  #print(img_path)
  img = mpimg.imread(img_path)
  plt.imshow(img)
  plt.axis('Off')
  plt.show()

cell运行结果: 猫狗分别两张

??4. 代码(三)——数据预处理以及网络搭建

import tensorflow as tf
import keras_preprocessing
from keras_preprocessing import image
from keras_preprocessing.image import ImageDataGenerator

TRAINING_DIR = "./rps/"
training_datagen = ImageDataGenerator(
      rescale = 1./255,
	  rotation_range=40,
      width_shift_range=0.2,
      height_shift_range=0.2,
      shear_range=0.2,
      zoom_range=0.2,
      horizontal_flip=True,
      fill_mode='nearest')

VALIDATION_DIR = "./rps-test-set/"
validation_datagen = ImageDataGenerator(rescale = 1./255)

train_generator = training_datagen.flow_from_directory(
	TRAINING_DIR,
	target_size=(150,150),
	class_mode='categorical'
)

validation_generator = validation_datagen.flow_from_directory(
	VALIDATION_DIR,
	target_size=(150,150),
	class_mode='categorical'
)

model = tf.keras.models.Sequential([
    # Note the input shape is the desired size of the image 150x150 with 3 bytes color
    # This is the first convolution
    tf.keras.layers.Conv2D(64, (3,3), activation='relu', input_shape=(150, 150, 3)),
    tf.keras.layers.MaxPooling2D(2, 2),
    # The second convolution
    tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D(2,2),
    # The third convolution
    tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D(2,2),
    # The fourth convolution
    tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D(2,2),
    # Flatten the results to feed into a DNN
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dropout(0.5),
    # 512 neuron hidden layer
    tf.keras.layers.Dense(512, activation='relu'),
    tf.keras.layers.Dense(3, activation='softmax')
])


model.summary()                  # 神经网络结构可视化

model.compile(loss = 'categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
            # loss 损失函数:交叉熵         # optimizer 学习步长            # metrics 性能:准确度
history = model.fit_generator(train_generator, epochs=5, validation_data = validation_generator, verbose = 1)
                                # 学习步长             #                # verbose 记录日志
# model.save("catdog.h5")
   # 模型保存为 catdog.h5

?cell运行结果: 可以看到训练样本准确度和测试样本准确的分别为70%和76%(可以就该epoch,来增加训练伦数,以提高准确度)

网络结构:

?训练过程:

Epoch 1/5
499/500 [============================>.] - ETA: 0s - loss: 0.7014 - acc: 0.5471
D:\PPPanghao\anaconda3\envs\py37\lib\site-packages\PIL\TiffImagePlugin.py:793: UserWarning: Truncated File Read
  warnings.warn(str(msg))
500/500 [==============================] - 300s 600ms/step - loss: 0.7014 - acc: 0.5473 - val_loss: 0.6831 - val_acc: 0.5045
Epoch 2/5
500/500 [==============================] - 221s 441ms/step - loss: 0.6510 - acc: 0.6269 - val_loss: 0.6043 - val_acc: 0.6790
Epoch 3/5
500/500 [==============================] - 222s 444ms/step - loss: 0.6168 - acc: 0.6694 - val_loss: 0.5558 - val_acc: 0.7080
Epoch 4/5
500/500 [==============================] - 223s 446ms/step - loss: 0.5964 - acc: 0.6859 - val_loss: 0.5875 - val_acc: 0.6630
Epoch 5/5
500/500 [==============================] - 222s 443ms/step - loss: 0.5751 - acc: 0.7024 - val_loss: 0.4868 - val_acc: 0.7660

??5. 代码(四)——验证分类结果

先将图片预处理:

from PIL import Image

#  待处理图片路径
image = Image.open("./cd/cat.jpg")
#  resize图片大小,入口参数为一个tuple,新的图片的大小
img_size = image.resize((150,150))
image = img_size
#  处理图片后存储路径,以及存储格式
img_size.save('./cd/catt.jpg', 'jpeg')

测试图片:

import numpy as np
from tensorflow.keras.preprocessing import image
# import matplotlib.pyplot as plt  # plt 用于显示图片
import matplotlib.image as mpimg  # mpimg 用于读取图片

image = mpimg.imread("./cd/catt.jpg")
# print(image.shape)
image = image.reshape(1,150,150,3)/255
# image=image/255
c = model.predict(image,batch_size=1)
print(c)

cell运行结果:可以看到是猫的概率为70%,狗的概率为30%,所以结果为猫

? [[0.69656205 0.30343798]]

?总结

至此本博客,从0开始搭建神经网络就结束了,有什么问题欢迎和我讨论。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-21 18:58:09  更:2022-05-21 19:00:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:01:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码