Keras学习笔记(一) 构建简单的NN

学习一下深度学习中的keras包,keras包是深度学习里面一个比较好用的包,实现起来的代码量一直都是比较少的。所以现在就来实现一下简单的NN神经网络。以下代码皆是使用Cocalc上的jupyter nootbook编写。
先是做一个简单的数据集。

import numpy as np
import matplotlib.pyplot as plt
 
X = np.linspace(-2, 6, 200)#从-2到6之间取200个数据
np.random.shuffle(X)#现场修改序列,改变自身内容。(类似洗牌,打乱顺序)
Y = 0.5 * X + 2 + 0.15 * np.random.randn(200,)#加上噪音。
 
# plot data
plt.scatter(X, Y)#散点图绘制
plt.show()#展示
 
X_train, Y_train = X[:160], Y[:160]     # 160个数据给训练集
X_test, Y_test = X[160:], Y[160:]    #40个给test

进行神经网络的搭建

from keras.models import Sequential#使用的序贯模型
from keras.layers import Dense#全连接神经网络
model =Sequential()#模型定义
model.add(Dense(input_dim=1,units=1))#搭建全连接层,只有一层,输入和输出都只有一个结点
model.compile(loss='mse',optimizer='sgd')#模型的编译,损失函数为均方误差,优化器为梯度下降
cost=model.fit(X_train,Y_train,epochs=100,batch_size=64)#训练模型,获得它的损失,采用的是批量
                           #梯度下降算法,所以batch_size的意思就是批量的大小
print(cost)#输出

输出只截取其中第一与最后一行:
第一行
Epoch 1/100
64/160 [=>…] - ETA: 0s - loss: 32.6729
160/160 [
==========] - 0s 656us/step - loss: 21.7859
最后一行
Epoch 56/100
64/160 [
=>…] - ETA: 0s - loss: 0.0742
从中可以观察到Epoch是迭代次数,由此我们可以发现其实该输出只输出到了迭代的56次。其中的损失从一开始的32.6729到后面的0.0742.
这次损失是呈下降趋势。

其我们还是可以把上面的cost=model.fit(X_train,Y_train,epochs=100,batch_size=64)至下部分改为:

from keras.optimizers import SGD #从优化器包里导入梯度下降
model.compile(loss='mse', optimizer=SGD(lr=0.01, momentum=0.9, nesterov=True))#损失还是均方误差,
但优化器这是自己构建的,其中的lr:大于0的浮点数,学习率,momentum:大于0的浮点数,动量参数,nesterov:布尔值,确定是否使用Nesterov动量
print("Trianing--------")
for i in range(100):#迭代100次
    cost=model.train_on_batch(X_train,Y_train)#这里也是批量梯度下降,只是换了一种写法
    if i % 20 ==0:
        print('train cost',cost)#输出

输出如下:

Trianing--------
train cost 2.160784
train cost 0.027121592
train cost 0.044771977
train cost 0.022048993
train cost 0.022066286

不做过多解释!
进入模型的评价和预测时间:

print("\nTesting-------")
loss_and_metrics=model.evaluate(X_test,Y_test,batch_size=40)#得到测试集的损失
print("test cost",cost)#输出
W,b=model.layers[0].get_weights()#获得第一层的权重与偏差
print('Weights=',W,'\nbiases= ',b)#输出

输出如下:
Testing-------

40/40 [==============================] - 0s 79us/step
test cost 0.021458160132169724
Weights= [[0.5021417]]
biases= [1.9995089]

从以上输出能够看到测试集全部预测正确,其最终的损失很小,而这个Weights与biases都是模型训练过后的数值。

Y_pred=model.predict(X_test)#预测
plt.scatter(X_test,Y_test)#散点图
plt.plot(X_test,Y_pred)
plt.show()

输出如下:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值