赞
踩
TensorFlow搭建神经网络最简单的方法是利用Keras中的函数快速建立模型并进行训练及使用,使用过程大致需要以下几步:
目录
网上有很多教程了,这里就不过多赘述了。
但是需要注意的是,TensorFlow与Python的版本兼容问题,本人当时使用的是Python3.7.8版本,目前可以正常使用。如果下载过慢或者下载失败可以使用我当时下载的版本,这里贴上百度云的链接:
链接:https://pan.baidu.com/s/18ltVfD7vDkf3_pc4WGEGNA?pwd=1234
提取码:1234
pip命令是使用Python过程中十分重要的命令,可以快速安装TensorFlow、numpy、Matplotlib等必须要用到的库。所以这个很重要,如果无法连接外网那么使用默认源,一般都会存在pip下载的缓慢或者下载失败的问题,所以在使用pip命令之前需要更换国内的镜像源。
由于站内已经有很不错的教程了,所以搜索一下pip国内镜像源,找最新的就好。
搜索pycharm,去jetbrains官方网站,下载即可。
如果下载失败,可以使用下面的链接,是2023.1 community版本
链接:https://pan.baidu.com/s/1_4ZLwIfDlccgMi4KJCHx6A?pwd=1234
提取码:1234
pycharm分为很多版本,运行神经网络什么版本都可以,所以建议选择免费的community版本,其他收费版本可能还需要其他步骤,多出来的功能如果不是正式做开发可能也用不到。为了这里讲的省事,就用community版本。安装过程没什么可说的,一路下一步即可,不放心可以搜一下别的教程。
最后是修改默认解释器,一般如果我们的Python是正确安装的,这一步可以跳过。修改到我们前面安装Python的那个地方就可以。如果不会的话搜索选择pycharm解释器。
由于之前已经把镜像源定向到国内了,所以这里直接按win+r键打开运行框,输入cmd命令进入命令行窗口即可。
命令行窗口中输入python -m pip install --upgrade pip,回车即可。
继续输入pip install tensorflow即可,安装其他包的时候,把TensorFlow换成numpy、matpoltlib、scikit-learn即可
我安装过了,所以跟你的文字可能不相同,一般不出现红色的error基本就是安装成功了。
目前已经有一篇很详尽的帖子了,照着做就可以,不过提醒一下注意版本,以及安装的时候有些东西是不必安装的。
可以在本站搜索cuda和cudnn安装教程。
这里我们将做一个最最简单的案例进行测试,让刚入手的同学们体会一下建立神经网络的全流程。
就以:为例。
首先神经网络是不知道这个对应关系的,它只知道输入的x和对应的y。
- # 之前没有安装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()
实际上搭建神经网络的方法不止一种,这种方法是最简单的,但无法建立带有分支的模型,因此后续可能会出一篇带分支模型的建立方法。
注意事项:
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)
- ])
首先我们把刚才生成的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=[])
这里没啥好说的,首先用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)
- # 文件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')
安装部分占据了大部分篇幅,但实际上并没有那么难,所以不再总结。
使用部分其实就是
1、数据集制作
2、神经网络搭建 (简单网络用Sequential()函数即可)
3、训练神经网络 (用compile()函数即可)
4、使用神经网络 (用fit()函数即可)
5、神经网络的保存与加载。(用model.save()与load_model()即可)
所以使用框架搭建神经网络并训练使用是一件很套路化的东西,所以并不难,难点在于如何建立契合问题的数据集、建立适应问题并兼容数据集维度的模型。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。