keras入门学习

最近业务上需要用到机器学习和深度学习的知识,最近也在不断的学习新知识,所以把自己最近用到一些基础知识和体会来记录一下

先按照我自己的理解说几个名词,机器学习,神经网络,深度学习

机器学习:让机器模拟人类的行为去学习一些东西,然后按照人类的逻辑去判断出一个结果或者给出一个结论

神经网络:就像人的神经网络,四通八达,然后有好多层,但是在深度学习里面的神经网络,就是一个数学模型而已

深度学习:算是机器学习的一个分支,这块其实我也没整太明白,所以最近也在不断的学习,就目前来说,我感觉就是利用神经网络来进行学习和训练,然后得出结果或者结论

然后说说目前学习的视频吧,主要就是吴恩达的机器学习和深度学习的视频,发现这位老师真的讲的很nice,很多理论知识都能让我这种数学渣子听的懂。。

这个是网易云课堂的视频
网易云课堂
这个是b站的学习视频
b站吴恩达
这个是我在b站看的另一个关于keras的视频,感觉讲的也挺不错,可以后面学习一下,今天的例子就是从这个视频里面来的
b站keras入门

然后就是最近因为要用到深度学习的东西,所以就发现来现在主流的框架基本都是tensorflow,也就是backend基本都是这个,前端基本都用的是keras,而keras的后端默认的也是tensorflow,所以就重点学习了一下这块的东西

首先就是我们喜闻乐见的线性回归,这里举一个最简单的一元线性回归,什么是一元线性回归,在我理解来看,就是下面的这个公式:

y = ax + b

也就是两个参数,一个输入,一个输出,然后我们给定一个训练集,通过深度学习的神经网络进行训练,得出最终的这个模型,也就是我们想要的一元线性回归方程,当然,这种训练模式就是监督学习,后面还有更加复杂的多元线性回归,但是基本思想和这个都是一样的

实现的代码也很简单,主要用到的包就是keras,这个框架太强大,强大到就算你不理解具体的算法,也可以使用它提供的api搭建自己想要的神经网络进行训练,这才是最强大的地方。下面的代码是在jupyter notebook里面运行的,所以输入和输出和一般的python编辑器有所区别

import tensorflow as tf
import numpy as np
import pandas as pd
import keras
from keras import layers
import matplotlib.pyplot as plt
%matplotlib inline

# 声明一个0到100之间的30个随机浮点数
x = np.linspace(0,100,30)
# 定义一个y计算公式,公式我们可以自定义
y = 11*x + 5 + np.random.randn(30)*6
# 画图查看x和y
plt.scatter(x,y)

# 声明一个model
model = keras.Sequential() # 使用顺序模型
# 添加一层神经网络,我们的输入和输出的参数都是1个,一共两个参数
model.add(layers.Dense(1,input_dim=1))
# 查看一下模型
model.summary()
# 编译模型,定义我们的优化器是adam,损失函数是mse,因为我们训练的模型是线性的,所以用mse好一点
model.compile(optimizer='adam',loss='mse')
# 训练模,epochs指的是我们的训练次数
model.fit(x,y,epochs=3000)
# 画图看看,原始数据用红色,预测数据用蓝色
# 预测数据还是用x,但是y用我们预测y来画图
plt.scatter(x,y,c='r')
plt.scatter(x,model.predict(x))
# 我们也可以预测一个单独的数字来看看
model.predict([150])
# 用原始的公式计算一下
11*150 + 5 + np.random.randn(30)*6
# 最终发现我们预测的值还是在这个区间里面的,说明我们预测的值还是比较准确的

上面这段程序里面,我们生成的x和y是这样的
x和y的值
而画出来的图像是这样的,可以很明显的看出来是一个线性回归的直线
plt
然后模型的summary是这样的,表示一共两个参数,一个神经网络层
model_summary
我这个训练最后的损失值还是不算小,但是也够用了
fit
最后画出来的拟合曲线,发现实际值和预测值基本重合
result
这个是我最终选了一个值测试的结果
test_result

上面就是一个简单的神经网络实现一元线性回归方程训练的过程,下面再来一个简单的例子,神经网络识别数字

这里用到了keras官方提供的数字图片集,因为国内网络的原因,所以一般都是下载不下来的,所以推荐直接下载到本地,然后放到~/.keras/datasets目录下面,这样就会自动读取来

这个是别人的百度网盘地址:

链接:https://pan.baidu.com/s/13FhV67vf8umg261a29Eg2Q 密码:yp6h

然后下面是我们的代码

import tensorflow as tf
import numpy as np
import pandas as pd
import keras
from keras import layers
import keras.datasets.mnist as mnist
import matplotlib.pyplot as plt
%matplotlib inline

# 这一步是下载训练数据,但是由于国内网的原因,一般都下载不下来。。
(train_image,train_label),(test_image,test_label) = mnist.load_data()

# 查看训练数据和测试数据
train_image.shape
test_image.shape

# 画个图看看
plt.imshow(train_image[0])
# 然后查看一下标签
train_label[0]

# 开始建立我们的模型
model = keras.Sequential()
# 这一步是将卷基层变成全链接层,因为我们的图片是28*28像素的图片,我们后面想用Dense层,但是Dense层只支持二维的数据,
# 所以我们要用Flatten把多维数据一维化
model.add(layers.Flatten())
# 添加我们的Dense层,这个地方的输出是64个单元的隐藏层,然后激活函数选择使用relu
model.add(layers.Dense(64,activation='relu'))
# 这个地方我们再添加一层,因为最终的输出是0~9的10个数字,所以输出的一共是10个单元
model.add(layers.Dense(10,activation='softmax'))
# 下面进行模型的编译
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['acc'])
# 最后进行模型的训练,因为这里的数据量比较大,所以我们建议分块训练,也就是每次训练512个样本,一共训练50次
model.fit(train_image,train_label,epochs=50,batch_size=512)
# 然后我们来使用测试数据进行测试
model.evaluate(test_image,test_label)

# 我们来看一下最终的结果
np.argmax(model.predict(test_image[:10]),axis=1)
test_label[:10]
# 发现只有倒数第二个识别的不对,本来是6,识别的是5,我们可以看一下具体的图片
plt.imshow(test_image[8])
# 其实真的挺像5的。。

上面的这段程序里面,label[0]的数字是这样的:
label[0]
我们训练到最后的结果,虽然也不咋地,但是loss值已经很小来了
fit

这是我们最终的训练结果

result

我想,通过这两个例子,应该能大概理解keras这个库的基本使用方式了,但是里面还有很多的东西,比如卷积RNN模型,还有类似对抗神经网络的东西,这些都是需要我后面去不断学习完善的

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值