神经网络简单说就是通过一种算法允许计算机通过合并新的数据来学习

1.神经网络是如何学习的?

与其他算法不同的是,具有深度学习能力的神经网络不能直接编程完成任务。相反,他们就像孩子发育中的大脑一样,他们需要学习这些信息。

一般学习方法有以下三种

  • 监督学习:这种学习策略是最简单的,因为有一个标记的数据集,计算机要经过这些数据集,然后对算法进行修改,直到它能够处理数据集以获得所需的结果。
  • 无监督学习:如果没有可供学习的标记数据集,则使用此策略。神经网络分析数据集,然后用代价函数告诉神经网络它离目标有多远。然后,神经网络进行调整,以提高算法的准确性。
  • 强化学习:在该算法中,对神经网络的正向结果进行强化,对一个负结果进行惩罚,迫使神经网络随着时间的推移而学习。

本文目前主要要用到监督学习

2.怎么学习去使用神经网络?

粗略看一下有个印象就行,不懂不必深究,后面的文章会详细普及概念

前提知识:线性代数 

看完这篇文章后涉及到如下知识点:什么是输入层?什么是隐藏层?什么是输出层?什么是正向传播?什么是反向传播?什么是激励函数?什么是损失函数?什么是梯度下降?

别急,在简单了解了神经网络的数学模型后来看一下视频讲解

  • 此部分包含:
  • 输入层
  • 隐藏层
  • 输出层
  • 此部分包含
  • 正向传播
  • 激励函数
  • 梯度下降
  • 此部分包含
  • 梯度下降法
  • 损失函数
  • 反向传播

注:在这三章中最重要的是网络结构,务必掌握!关于梯度下降法和反向传播部分由于后续在代码实现上有库做支撑,这部分知识仅作了解即可

3.如何用代码实现神经网络?

在了解了神经网络的数学模型和基本概念后我们就需要用代码实现了,在这里我们用到了Keras:基于 Python 的深度学习库

官方的介绍是这样的:

你恰好发现了 Keras。


Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlowCNTK, 或者 Theano 作为后端运行。Keras 的开发重点是支持快速的实验。能够以最小的时延把你的想法转换为实验结果,是做好研究的关键。

如果你在以下情况下需要深度学习库,请使用 Keras:

允许简单而快速的原型设计(由于用户友好,高度模块化,可扩展性)。
同时支持卷积神经网络和循环神经网络,以及两者的组合。
在 CPU 和 GPU 上无缝运行。

查看文档,请访问 Keras.io

Keras 兼容的 Python 版本: Python 2.7-3.6

Keras中文官方指导手册https://keras.io/zh/

Keras中文第三方翻译手册https://keras-cn.readthedocs.io/en/latest/

前提环境需求:Python3,TensorFlow(推荐)或CNTK或Theano

建议先安装更方便的包管理器Anaconda https://www.anaconda.com/

环境安装顺序:Anaconda->Python3->建立一个新环境->TensorFlow->Keras

这里建议安装Spyder作为python默认编辑器

4.Keras如何使用?

官方手册和汉化译本已经写的很详细了,这里我搬运一下

任务:了解各个层的用途,重点理解全连接层和激活函数

以下是使用Keras搭建的BP神经网络模型进行MNIST数据集的测试

import numpy as np
import matplotlib.pyplot as plt

from keras.models import Sequential, Model
from keras.utils import to_categorical

from keras.layers import Dense,Input, Embedding, LSTM
from keras.layers import Conv2D, MaxPooling2D
from keras.layers import Activation, Flatten

from keras.datasets import mnist

model = Sequential() #创建一个模型
model.add(Dense(units=784, activation='relu', input_dim=784)) 
#添加第一层,输入784单元,输出784单元,激活函数relu

model.add(Dense(units=10, activation='softmax'))
#添加第二层,无需管上层输入数量,输出10单元
model.summary()
#查看模型结构

model.compile(loss='categorical_crossentropy',
              optimizer='sgd',
              metrics=['accuracy'])
#编译模型

# load (downloaded if needed) the MNIST dataset MNIST数据集,手写数字的数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()#从mnist库中读取数据

print(x_train.shape)
print(x_test.shape)
print(y_train.shape)
print(y_test.shape)

# 可视化查看一下
#fig = plt.figure()
# for i in range(20):
#     ax = fig.add_subplot(1, 20,i + 1, xticks = [], yticks = [])
#     ax.imshow(x_train[i], cmap = 'gray')
#     ax.set_title(str(y_train[i]))

# 归一化
x_train=x_train / 255
x_test=x_test / 255

x_train=x_train.reshape(-1,784)
x_test=x_test.reshape(-1,784)

y_train = to_categorical(y_train)
y_test = to_categorical(y_test)

model.fit(x_train, y_train, epochs=5, batch_size=32) #数据丢进模型开始训练

score = model.evaluate(x_test, y_test, batch_size=128) #模型评估
print("loss:",score[0])
print("accu:",score[1])


model.predict_classes(x_test, batch_size=128) #使用验证集进行预测

暂时先写这么多,有时间继续更新


To capture the forces of nature.