在一次偶然的机会下,接触到了指导老师所经手的项目,开始了我的深度学习之旅。在此进行一些学习上的记录与心得:
1.安装tensorflow库
对于深度学习而言,其必备库自然为tensorflow,关于这个库的安装确实存在一些坑,该库已经更新到2.2.0版本及其以上。但如果你在网上直接检索,你会发现其大多数的安装贴均为1.8 1.9版本,而实际上随着更新,官方已经移除了这两个版本,并且语法也有较大的改变。所以按照其上进行安装的时候,我的python也进行了疯狂报错:主要分为下列两个大问题:
1.DLL error 找不到相应模块
2.HDF5文件不匹配
关于第一个问题,我个人采取的解决方案是搭建虚拟python环境为3.6。 经过查找相关资料发现python 3.5-3.8均可,然后在虚拟环境下进行tensorflow安装,随后发现可能是太久没用python,相关库未进行更新。随即upgrade一下就能成功import tensorflow as tf
第二个问题就是在实际运行中,总会报错HDF5不匹配 仔细查看报错原因是HDF5已经到1.10.5而tensorflow 所使用的HDF5基于1.10.4。所以就会报不匹配的错。解决方案也很简单,卸载高版本重新安装低版本即可。
2.使用tensorflow进行搭建一个简单的LSTM网络
由于刚入门接触这个tensorflow库,对其函数还不甚了解,在网上查找半天发现长代码稍许难以理解。故选取了一个最简单的LSTM进行入手,其功能主要为鉴别整数与小数,代码如下:
from tensorflow.python.keras.layers.core import Dense, Dropout,Activation,Flatten
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.utils import np_utils
from tensorflow.python.keras.layers import LSTM
import tensorflow as tf
import numpy as np
def train():
nyarray= [ [[9]],[[2.5]],[[3]],[[4.6]],[[6.9]],[[10]] ]
nycheck= [ [[1]],[[0]],[[1]],[[0]],[[0]],[[1]] ]
pd=tf.cast(nyarray,tf.float32)
pe=tf.cast(nycheck,tf.float32)
model = Sequential()
lstm = LSTM(10,input_shape=(1,1))
dense = Dense((1),input_shape = (1,1))
activate= Activation('relu')
model.add(lstm)
model.add(dense)
model.add(activate)
model.compile(loss='mse',optimizer='adam',metrics=['accuracy'])
model.fit(pd,pe,epochs=500,shuffle=True)
train()
我们先从引用的库进行分析 dense为全连接层
dropout是tensorflow中防止训练过拟合的一种措施,实际作用无非是使输入tensor中某些元素变为0,其它没变0的元素变为原来的1/keep_prob大小。但是我这里数据量非常小,故实际上没有进行调用。
Activation 字面意思 激活函数
Sequential 序列模型 就是个将各个层加在一起,然后开始训练。
随即开始代码分析,我们首先给出两个数据组 一个是输入数据一个是识别数据,随后我们将数据进行转化为32位浮点数据。设定了10个单元,输入数据为1维。添加一个全连接层,随后用relu函数进行激活。最后将之前构建的层相连接,开始训练
训练时损失函数采用均方误差(标准差)优化器则采用adam(没咋看过这个)然后就开始训练了
训练次数为500次,输出结果如下
6/6 [==============================] - 0s 651us/sample - loss: 0.1900 - accuracy: 0.6667
Epoch 148/500
6/6 [==============================] - 0s 488us/sample - loss: 0.1899 - accuracy: 0.6667
Epoch 149/500
6/6 [==============================] - 0s 813us/sample - loss: 0.1898 - accuracy: 0.6667
6/6 [==============================] - 0s 814us/sample - loss: 0.1511 - accuracy: 0.8333
Epoch 499/500
6/6 [==============================] - 0s 651us/sample - loss: 0.1510 - accuracy: 0.8333
Epoch 500/500
6/6 [==============================] - 0s 813us/sample - loss: 0.1508 - accuracy: 0.8333
发现损失值的确在缓慢下降 并且准确度也再提高,符合预期。