深度学习与神经网络入门

神经网络概述

神经网络是由多层神经元组成的复杂系统,旨在模拟人脑的神经网络结构,使其能够像人类一样理解和响应。这种网络设计用于执行机器学习算法难以胜任的更复杂的任务,并且在性能上无法达到所需标准。神经网络能够执行许多复杂的任务,包括图像分类、目标检测、面部识别、文本摘要、语音识别等,应用范围非常广泛。

神经网络如何学习复杂特征?神经网络拥有多层结构,每一层执行特定的功能,网络越复杂,性能越强。因此,神经网络也被称为多层感知器。

Keras库简介

Keras是一个快速、开源且易于使用的神经网络库,用Python编写,运行在Theano或TensorFlow之上。TensorFlow提供了低级和高级API,而Keras仅提供高级API。对于初学者来说,建议先使用Keras,然后再转向TensorFlow。原因是TensorFlow的函数对于初学者来说理解起来较为复杂,而Keras的功能则相对简单。

构建首个Keras模型

将逐步构建一个简单的人工神经网络,这将帮助在未来创建自己的模型。

将使用Pima Indians Diabetes Data数据集,可以从这里下载。这是一个由UCI机器学习数据集提供的简单数据集,包含印度患者的医疗记录。需要预测患者是否会在5年内出现糖尿病。

import pandas as pd data = pd.read_csv('diabetes.csv') x = data.drop("Outcome", axis=1) y = data["Outcome"]

这是一个二元分类问题,需要判断患者是否会出现糖尿病,即1或0。所有列都是数值型,这使得可以直接在其上构建神经网络。因此,已经分离了独立和依赖数据。

在Keras中,模型总是定义为一系列层。这意味着初始化序列模型,并逐层添加,按列表顺序执行。实际上,需要尝试通过添加和移除层来实验,直到对架构感到满意。

需要注意的是,第一层必须有正确数量的输入特征,这是通过input_dim参数指定的。可以将神经元的数量作为层的第一个参数来指定。要定义激活函数,请使用activation参数。

from keras.models import Sequential from keras.layers import Dense model = Sequential() model.add(Dense(12, input_dim=8, activation="relu")) model.add(Dense(8, activation="relu")) model.add(Dense(1, activation="sigmoid"))

请记住,在第一层,即输入层,指定数据的正确形状。

当编译Keras模型时,它使用后端数值库,如TensorFlow或Theano。无论使用哪个后端,它都会自动选择在硬件上(如CPU、GPU或TPU)表示网络的最佳方式。

在编译模型时,必须指定一些额外的参数,以更好地评估模型并找到将输入映射到输出的最佳权重集合。

损失函数 - 必须指定损失函数,以评估模型将映射的权重集合。将使用交叉熵作为损失函数,实际上被称为二元交叉熵,用于二元分类。

优化器 - 第二个是优化器,用于优化损失。将使用adam,这是梯度下降的一个流行版本,在大多数问题中都能给出最佳结果。

model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])

模型成功编译后,准备将数据拟合到模型并开始训练神经网络。除了向模型提供数据外,还需要定义训练发生的周期数和批量大小。

周期 - 通过训练数据集的所有行的单次传递

批量大小 - 模型在更新权重之前考虑的样本数量。

model.fit(x, y, epochs=150, batch_size=10)

一个周期可以包含多个批次。这些参数最终是在试错方法后决定的。

训练模型后,让了解神经网络的性能。模型总是在测试集上进行评估,在本例中,为了简单起见,在完整数据集上进行了训练,但在任何项目中,通常会分割数据并训练网络。

_, accuracy = model.evaluate(x, y) print("Model accuracy: %.2f" % (accuracy * 100))

要评估模型,请使用evaluate方法,并将输入和输出传递给模型,以检查性能。

通过简单地使用predict方法,可以预测新数据的输出。由于有一个二元分类问题,所以输出将简单地是0或1。

predictions = model.predict(x) print([round(x[0]) for x in predictions])

或者,也可以直接使用predict_classes函数来预测类别。

解决了,使用Keras仅用几行代码就轻松地构建了一个具有3层的神经网络。

model = Sequential() #define model model.add(Dense(12, input_dim=8, activation="relu")) model.add(Dense(8, activation="relu")) model.add(Dense(1, activation="sigmoid")) model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"]) #compile model model.fit(x, y, epochs=150, batch_size=10) #training _, accuracy = model.evaluate(x, y) #testing print("Model accuracy: %.2f" % (accuracy * 100)) predictions = model.predict(x) #make predictions #round the prediction rounded = [round(x[0]) for x in predictions]
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485