Keras深度学习神经网络入门实践小例

本文简述keras用于神经网络搭建分类模型的简单案例。
对于简单的分类模型的实现,大体的思想其实不难理解。分类任务属于有监督学习,通常会处理数据部分和标签部分,然后将数据和对应的标签装入模型进行训练即可,也就是:

(1)通过一些数据处理方法处理好模型所需要的数据
(2)划分数据集(训练集和测试集),可采用7:3的比例进行划分
(3)明确分类的类别,构建神经网络模型
(4)将数据集装入模型进行训练优化
(5)保存训练的模型

下面就做一个简单的二分类任务:(就按照上面的过程来)
(1,2)处理数据划分数据集

def Data():

    x = [];y = []
    x_ = [];y_ = []
    
    for i in range(140):
        digit = np.random.uniform()
        x.append(digit)
        if digit < 0.5:
            y.append([0])
        else:
            y.append([1])
            
    for i in range(60):
        digit = np.random.uniform()
        x_.append(digit)
        if digit < 0.5:
            y_.append([0])
        else:
            y_.append([1])
            
    return np.array(x).reshape(140,1),np.eye(2)[np.array(y)].reshape(140,2),np.array(x_).reshape(60,1),np.eye(2)[np.array(y_)].reshape(60,2)

x,y,x_,y_ = Data()

用numpy生成(0,1)之间的小数,<0.5的部分设为类别“一”,其他的部分设为类别“二”。为了能将标签装入模型训练,需要将标签转为one_hot向量。one_hot向量只有一个“1”,即为所属标签的位置为“1”,其余的部分全为“0”。
对于这个二分类,假设第一个数据的标签为“0”,则标签的one_hot向量表示为[1,0]。若标签为“1”,则为[0,1],高维情况抑如此。
我习惯使用numpy的eye函数,np.eye(num)[label],num为分类的数量,这里是二分类所以为2,label为数据的标签。
Data()函数最后返回训练集和测试集,分别有140,60个数据(已经划分好数据集)。
注:
数据集的划分可使用sklearn的train_test_split函数划分,使用方法如下:
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3)
x,y为数据和对应的标签,test_size为测试集的大小,可自定义

(3)明确类别,搭建神经网络
对于分类任务,一般性的使用“softmax”作为最后一层的激活函数,但是鉴于这次任务是一个二分类,我使用了“sigmoid”代替。
观察“sigmoid”的函数图像:
Keras深度学习神经网络入门实践小例_第1张图片

可以看到在x轴尺度扩大的情况下,该函数近似于一个将输入映射到 0 or 1的二分类映射,在二分类任务中可以直接的使用。
这个模型很简单,只有三层,两层包含64个神经元并采用“relu”作为激活函数的全连接层,以及第三层用于分类的全连接层。然后编译模型,使用“adam”优化器,损失函数使用均方差,评估标准为准确率。

def Model():
    model = Sequential()
    model.add(layers.Dense(64,"relu"))
    model.add(layers.Dense(64,"relu"))
    model.add(layers.Dense(2,"sigmoid"))
    model.compile("adam","mse",metrics=["acc"])
    return model

(4)装入数据进行训练

model.fit(x,y,epochs=50,validation_data=(x_,y_))

这里简单的使用了fit()函数,定义了五十轮训练,x,y为装入的数据,validation_data用于测试集的输入。
Keras深度学习神经网络入门实践小例_第2张图片

(5)保存训练的模型

model.save("M.h5")

这个简单的模型就到此为止了,附上代码部分:

import numpy as np
from tensorflow.keras import layers,Sequential

def Data():

x = [];y = []
x_ = [];y_ = []

for i in range(140):
    digit = np.random.uniform()
    x.append(digit)
    if digit < 0.5:
        y.append([0])
    else:
        y.append([1])
        
for i in range(60):
    digit = np.random.uniform()
    x_.append(digit)
    if digit < 0.5:
        y_.append([0])
    else:
        y_.append([1])
        
return np.array(x).reshape(140,1),np.eye(2)[np.array(y)].reshape(140,2),np.array(x_).reshape(60,1),np.eye(2)[np.array(y_)].reshape(60,2)

x,y,x_,y_ = Data()

def Model():
    model = Sequential()
    model.add(layers.Dense(64,"relu"))
    model.add(layers.Dense(64,"relu"))
    model.add(layers.Dense(2,"sigmoid"))
    model.compile("adam","mse",metrics=["acc"])
    return model

model = Model()

model.fit(x,y,epochs=50,validation_data=(x_,y_))

model.save("M.h5")

同样是Eason的歌,沙龙,每张都罕有的勒
留住温度,速度,温柔和愤怒 ——— 沙龙

你可能感兴趣的:(练习,深度学习,tensorflow,python,神经网络)