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()即可)

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

 

 

  • 10
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值