TensorFlow快速入门:Keras手把手教程(含源代码可实现)_keras教程-程序员宅基地

技术标签: tensorflow  深度学习  keras  

TensorFlow搭建神经网络最简单的方法是利用Keras中的函数快速建立模型并进行训练及使用,使用过程大致需要以下几步:

 

目录

1、安装Python并配置

1.1 安装Python

1.2 定向pip命令至国内镜像源

1.3 安装pycharm

2、安装TensorFlow、CUDA

2.1 pip命令安装TensorFlow

2.1.1、打开命令行窗口

2.1.2 更新pip程序

2.1.3 安装TensorFlow

2.2 下载并安装CUDA及CUDNN

3、写代码

3.1 数据集的制作

3.2 神经网络模型

3.2.1 利用Sequential()函数搭建网络

3.2.2 使用fit()函数训练神经网络并保存

3.2.3 模型加载并通过predict()函数使用模型

3.2.4 全部代码

4、总结


 


 

1、安装Python并配置

1.1 安装Python

        网上有很多教程了,这里就不过多赘述了。

        但是需要注意的是,TensorFlow与Python的版本兼容问题,本人当时使用的是Python3.7.8版本,目前可以正常使用。如果下载过慢或者下载失败可以使用我当时下载的版本,这里贴上百度云的链接:

链接:https://pan.baidu.com/s/18ltVfD7vDkf3_pc4WGEGNA?pwd=1234 
提取码:1234 

 

1.2 定向pip命令至国内镜像源

        pip命令是使用Python过程中十分重要的命令,可以快速安装TensorFlow、numpy、Matplotlib等必须要用到的库。所以这个很重要,如果无法连接外网那么使用默认源,一般都会存在pip下载的缓慢或者下载失败的问题,所以在使用pip命令之前需要更换国内的镜像源。

由于站内已经有很不错的教程了,所以搜索一下pip国内镜像源,找最新的就好。

1.3 安装pycharm

搜索pycharm,去jetbrains官方网站,下载即可。


如果下载失败,可以使用下面的链接,是2023.1 community版本

链接:https://pan.baidu.com/s/1_4ZLwIfDlccgMi4KJCHx6A?pwd=1234 
提取码:1234 


        pycharm分为很多版本,运行神经网络什么版本都可以,所以建议选择免费的community版本,其他收费版本可能还需要其他步骤,多出来的功能如果不是正式做开发可能也用不到。为了这里讲的省事,就用community版本。安装过程没什么可说的,一路下一步即可,不放心可以搜一下别的教程。


最后是修改默认解释器,一般如果我们的Python是正确安装的,这一步可以跳过。修改到我们前面安装Python的那个地方就可以。如果不会的话搜索选择pycharm解释器。


2、安装TensorFlow、CUDA

2.1 pip命令安装TensorFlow

2.1.1、打开命令行窗口:

        由于之前已经把镜像源定向到国内了,所以这里直接按win+r键打开运行框,输入cmd命令进入命令行窗口即可。

9a3d40ac26ba4175b8371a85fbea1e9b.png


 

2.1.2 更新pip程序:

命令行窗口中输入python -m pip install --upgrade pip,回车即可。

4dd934f9184d4dd485f667cdbee6ca91.png


2.1.3 安装TensorFlow:

        继续输入pip install tensorflow即可,安装其他包的时候,把TensorFlow换成numpy、matpoltlib、scikit-learn即可

4242995884564789b59ed7268681c1e1.png

 我安装过了,所以跟你的文字可能不相同,一般不出现红色的error基本就是安装成功了。


2.2 下载并安装CUDA及CUDNN

        目前已经有一篇很详尽的帖子了,照着做就可以,不过提醒一下注意版本,以及安装的时候有些东西是不必安装的。

可以在本站搜索cuda和cudnn安装教程。

3、写代码

        这里我们将做一个最最简单的案例进行测试,让刚入手的同学们体会一下建立神经网络的全流程。

就以:gif.latex?y%3Dx%5E2-2x+1为例。

首先神经网络是不知道这个对应关系的,它只知道输入的x和对应的y。

 

3.1 数据集的制作

# 之前没有安装numpy,这里可能会报错,安装numpy就行。
# 也可能安装TensorFlow的时候就安装过了,不报错就行
import numpy


def make_data():
    # 用于保存所有的x
    x = []

    # 用于保存所有的y
    y = []
    for i in range(10000):
        # 将i作为自变量,添加到列表x的末尾
        x.append(i)

        # 将i ** 2 + 2 * i + 1作为输出,添加到列表y的末尾
        y.append(i ** 2 + 2 * i + 1)

    # 保存x和y,分别作为数据集的输入和输出,前面的字符串是保存文件的名字
    numpy.save('x_data', x)
    numpy.save('y_data', y)


# 运行完之后,文件夹内会多出来'x_data.npy'、'y_data.npy'两个文件
make_data()

3.2 神经网络模型

3.2.1 利用Sequential()函数搭建网络

实际上搭建神经网络的方法不止一种,这种方法是最简单的,但无法建立带有分支的模型,因此后续可能会出一篇带分支模型的建立方法。

注意事项:

1、维度相匹配,数据集输入的维度应当与第一层相匹配,模型内部相邻的两层维度应当相匹配。

2、最后一层的神经元数量应当与输出的数量一致。

简单来说如果期望的结果是[y1],那么最后一层就是Dense(1);

如果是[y1,y2],那么最后一层就是Dense(2);

如果是[y1,y2,y3],那么最后一层就是Dense(3),以此类推。

我们最后只是输出一个浮点数,所以输出的Dense中的神经元只有1个。

 

神经网络有很多种,Dense表示全连接神经网络,实际上还有

卷积神经网络的Conv1D、Conv2D、MaxPooling1D;

RNN改进型网络的LSTM、GRU;

以及防止过拟合等功能的Dropout、BatchNormalization等layer。

像下列代码一样,将对应的layer放入Sequential()中即可完成模型的建立。

具体如何建立模型,可以参考相关课程,本文只关注快速实现。

from keras.models import Sequential
from keras.layers import Dense

model = Sequential([
    # 包含两层全连接网络,第一层2个神经元,第二层1个神经元
    Dense(2),
    Dense(1)
])

3.2.2 使用fit()函数训练神经网络并保存

首先我们把刚才生成的x_data,y_data加载到对应的变量中。

之后使用compile()函数对训练过程进行配置:

loss=mean_squared_error 意为使用均方误差作为损失函数,还有其他的损失函数可选,包含在keras.losses中可以看一看。

optimizer='adam'表示选择优化器为adam。还有一些其他的优化器,不过adam最常用。

之后就是使用 fit() 函数对模型进行训练了,函数括号中前两个位置,也就是x_data,y_data,表示数据集的输入和输出。

shuffle=True                 将数据集打乱。

validation_split=0.15     拿出数据集中的15%的数据作为测试集。

epochs=300                  训练300轮。

batch_size=512             将512个数据划分为一组,一同喂入神经网络。

callbacks=[]                   是回调函数,一般可用于断点续训,提前终止训练等,本案例不管。

 

最后model.save('model.h5')保存模型,字符串为保存模型的名字。

from keras.losses import mean_squared_error

x_data = np.load('x_data.npy')
y_data = np.load('y_data.npy')
model.compile(loss=mean_squared_error, optimizer='adam')
history = model.fit(
    x_data, y_data, 
    shuffle=True, validation_split=0.15, 
    epochs=300, batch_size=512, 
    callbacks=[])

3.2.3 模型加载并通过predict()函数使用模型

这里没啥好说的,首先用load_model()函数加载模型h5文件,之后调用predict()函数直接预测就行。

不过这个输入维度需要注意一下,有时候需要reshape一下再使用。

from keras.models import load_model

# 加载模型
model = load_model('model.h5')

# 定义输入的数据
x1 = 0.4

# 输出结果,将结果保存到res。
# 这里一般需要注意数据的维度问题,所以包成了一个列表。
res = model.predict([x1])

# 打印预测值
print(res)
# 打印准确值
print(x1 ** 2 + 2 * x1 + 1)

3.2.4 全部代码

# 文件1,运行后生成数据集的输入x_data.npy,与结果y_data.npy。
import random
import numpy


def make_data():
    # 用于保存所有的x
    x = []

    # 用于保存所有的y
    y = []
    for i in range(1000):
        # 将i作为自变量,添加到列表x的末尾
        n = random.random()
        x.append([n])

        # 将i ** 2 + 2 * i + 1作为输出,添加到列表y的末尾
        y.append(n ** 2 + 2 * n + 1)

    # 保存x和y,分别作为数据集的输入和输出,前面的字符串是保存文件的名字
    numpy.save('x_data', x)
    numpy.save('y_data', y)


# 运行完之后,文件夹内会多出来'x_data.npy'、'y_data.npy'两个文件
make_data()
# 文件2,生成神经网络,配置并训练。
# 训练过程的损失函数保存在history中。
# 模型保存为model.h5文件
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.losses import mean_squared_error

model = Sequential([
    Dense(1, activation=None),
    Dense(2, activation=None),
    Dense(1, activation=None)
])

x_data = np.load('x_data.npy')
y_data = np.load('y_data.npy')
model.compile(loss=mean_squared_error, optimizer='adam')
history = model.fit(
    x_data, y_data,
    shuffle=True, validation_split=0.15,
    epochs=1000, batch_size=512,
    callbacks=[])
model.save('model.h5')
# 文件3,加载神经网络并使用
from keras.models import load_model

# 加载模型
model = load_model('model.h5')

# 定义输入的数据
x1 = 0.4

# 输出结果,将结果保存到res。
# 这里一般需要注意数据的维度问题,所以包成了一个列表。
res = model.predict([x1])

# 打印预测值
print(res)
# 打印准确值
print(x1 ** 2 + 2 * x1 + 1)
# 文件4,模型训练没收敛,重新加载模型并继续训练
import numpy as np
from keras.models import load_model

# 加载数据集及模型
x_data = np.load('x_data.npy')
y_data = np.load('y_data.npy')
model = load_model('model.h5')

# 重新调用fit函数
history = model.fit(x_data, y_data, shuffle=True, validation_split=0.15, epochs=3000, batch_size=512, callbacks=[])

# 保存模型
model.save('model.h5')

4、总结

安装部分占据了大部分篇幅,但实际上并没有那么难,所以不再总结。

使用部分其实就是

1、数据集制作

2、神经网络搭建                 (简单网络用Sequential()函数即可)

3、训练神经网络                 (用compile()函数即可)

4、使用神经网络                 (用fit()函数即可)

5、神经网络的保存与加载。(用model.save()与load_model()即可)

所以使用框架搭建神经网络并训练使用是一件很套路化的东西,所以并不难,难点在于如何建立契合问题的数据集、建立适应问题并兼容数据集维度的模型。

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_40600296/article/details/130223790

智能推荐

mysql主从灾备_mysql查看主备状态-程序员宅基地

文章浏览阅读2.9k次,点赞4次,收藏6次。个人分类:数据库相关双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步。对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致。 这样做的好处多。 1. 可以做灾备,其中一个坏了可以切换到另一个。 2. 可以做负载均衡,可以将请求分摊到其中任何一台上,提高网站吞吐量。 对于异地热备,尤其适合灾备。废话不多说了。我们直接进入主题。 我们会主要介绍两部分内容:..._mysql查看主备状态

Selenium自动化测试-进阶_selenium自动化测试进阶使用-程序员宅基地

文章浏览阅读606次。浏览器、鼠标、键盘 操作 maximize() 设置浏览器最大化setSize() 设置浏览器宽高back() 模拟浏览器后退按钮forward() 模拟浏览器前进按钮refresh() 刷新页面(F5) Actions 类提供了鼠标操作的常用方法:contextClick() 右击clickAndHold() 鼠标点击并控制doubleClick() 双..._selenium自动化测试进阶使用

Java数字金额转化成汉字大写金额_java两位小数金额转大写-程序员宅基地

文章浏览阅读1.6k次。import java.math.BigDecimal;/** * Utils - 金额转为大写汉字 */public final class NumberToCNUtils { /**汉语中数字大写*/ private static final String[] CN_UPPER_NUMBER = { "零", "壹", "贰", "叁", "肆", "伍", "陆..._java两位小数金额转大写

CMM(软件能力成熟度模型)-程序员宅基地

文章浏览阅读1.4w次,点赞16次,收藏116次。CMM,即“软件能力成熟度模型”,是对组织软件过程的描述,核心内容是将软件开发视为一个过程,并且根据相应的原则对于软件开发进行相应的监控和研究。_cmm

vue2+vue-cli使用unocss_vue2 unocss-程序员宅基地

文章浏览阅读2.5k次。在根目录中添加 unocss.config.js 文件是为了提供更细粒度的配置选项给 @unocss/webpack 插件。通过这个配置文件,你可以定制化 UnoCSS 的行为,例如定义主题样式、配置插件、启用或禁用特定功能等。在 Vue CLI 项目中,默认情况下,你应该在根目录创建一个 unocss.config.js 文件来配置 UnoCSS。这个文件会被 @unocss/webpack 插件自动识别并加载。具体配置请查阅官网文档。_vue2 unocss

【C++】最通俗的多态、虚表、虚指针讲解_虚表指针-程序员宅基地

文章浏览阅读2.9k次,点赞26次,收藏82次。多态需要两个特性:(1)方法重写(override):父类与子类具有函数签名完全相同的方法。(2)向上类型转换(upcasting):用一个父类指针指向子类对象的时候,假如调用的是虚函数,会自动暂时将该指针转换为子类类型的指针。虚函数的存在就是为了类型转换,即使没有虚函数也能重写方法。虚函数并不是为了解决函数重写问题的。假如你去在父类和子类中都写上函数签名相同的方法,同样也能重写函数。例如 我们先写一个没有虚函数的例子结果为是完全没问题的!是的,即使不加virtual,也能实现方法重写!假如我用子类_虚表指针

随便推点

CreateFont函数关于字符集与字体的两个参数_createfont字符集怎么设置-程序员宅基地

文章浏览阅读5.8k次。对于fdwCharSet和lpszFace两个参数以及他们的关系,刚开始不是很理解,所以google了一些资料,对这个问题有了一点自己的认识。_createfont字符集怎么设置

小米格机9008救砖后如何跳过nv损坏进入MIUI系统写基带并修临时基带_9008备份基带-程序员宅基地

文章浏览阅读2.7k次。我k40刷完后虽然串号这些都有了也识别卡了但是没信号是因为modem分区用的工厂包的文件还是我手机坏了或者qcn有问题如果你在没有改qcn的情况下刷回原系统的modem分区文件你又会进入nv损坏无限重启[doge]这时你就会发现电脑设备管理器会出现新的4个新设备端口打开QPST就可以刷基带了(k40在正常的系统我觉得应该也可以用这种方式开启端口备份基带,改串号可以用星海之类的软件正常勿改)。以上都是经验之谈具体看个人[坏笑][坏笑][坏笑][坏笑]从折腾了这几天的红米k40来看。从k40救砖经验来看。_9008备份基带

参与CSDN1024程序员节活动-程序员宅基地

文章浏览阅读4k次。有幸参与了CSDN主办的1024程序员活动-岳麓对话,聆听各位专家畅谈中国软硬件产业的根技术以及前沿科技的发展现状和未来。听程序员们聊技术,都比较实在落地,在谈到如果你有个孩子在读大学你会推荐他学什么专业和技术时,各位大佬都集体推荐本专业或本专业的基础学科,都充满了对自己行业的自豪感。小冰CEO李笛说:学习人工智能,未来如果技术被颠覆了,等于是自杀,而不学人工智能,则相当于是他杀。百度副总裁马杰说:我们应站在时代的肩膀上,人工智能在深刻地改变我们的世界,未来会持续产生影响。国科量子副总裁聂际敏说:学

BIM族库下载——10套知名地产Revit样板文件_地暖bim效果图-程序员宅基地

文章浏览阅读1.2k次。【资源介绍】资源名称:10套知名地产Revit样板文件资源分类: BIM族库、Revit族库其他简介:10套知名地产Revit样板文件【资源下载】链接:https://pan.baidu.com/s/1qsTHMbhGkiXztPQDmJlKfQ提取码:wb33【资源截图】【免责申明】本站提供的资源下载链接均来自互联网,仅供学习研究之用,不得用于商业,请在24小时内删除!资源版权归原作者及其公司所有,如果你喜欢,请购买正版。..._地暖bim效果图

西电软件体系结构——01绪论-程序员宅基地

文章浏览阅读288次。课程简介软件体系结构的主题是针对复杂软件系统的高层结构、组织单元之间的相互关系的描述,以及围绕这种描述开展的各项活动,如设计、评估、实现、管理等。课程目标_西电软件体系结构

Job for mysqld.service failed because the control process exited with error code-程序员宅基地

文章浏览阅读1k次。initialize specified but the data directory has files in it.”意思是初始化数据目录时发现目录里面有文件,可能原因是之前运行过命令目录中已生成文件。只要我们找到MySQL的数据目录并删除里面的文件即可解决。datadir是我们安装MySQL时默认指定的存放文件的数据目录,进入文件中删除里面的目录即可。网上搜了一下绿线标注部分语句,说是缺少libaio这个包,那就装一下。PS:如果我的方法没用的话可以试试网上说的修改文件权限的方法。_job for mysqld.service failed because the control process exited with error