当前位置: 首页 > 科技观察

用不到30行代码用Keras编写你的第一个神经网络!_0

时间:2023-03-22 13:53:39 科技观察

【.com速译】回想我刚接触AI的时候,我清楚地记得有些概念看起来是多么的难。阅读神经网络的简单介绍时,经常会遇到科学论文,其中包含您以前从未见过的符号中的公式,但实际上开始编写您的第一个神经网络要容易得多!那么什么是神经网络?好问题!在用Python自己编写一个简单的神经网络之前,先介绍一下神经网络以及它们为何如此令人兴奋!HNCSoftware的联合创始人RobertHecht-Nielsen博士简单地说。…神经网络是由许多简单且高度互连的处理单元组成的计算系统,这些处理单元通过对外部输入的动态响应来处理信息。—《神经网络入门:第一部分》,人工智能专家MaureenCaudill,1989年2月事实上,神经网络是一组数学表达式,擅长识别信息或数据中的模式。神经网络通过模仿人类的感知来做到这一点,但它不是像人类一样看图片,而是表示包含在向量或标量中的数字信息(向量只包含一个数字)。它将这些信息逐层传递,一层的输出作为下一层的输入。在通过这些层时,输入会被权重和偏差修改,然后发送到激活函数以映射输出。然后通过成本函数完成学习,该函数将实际输出与期望输出进行比较,这反过来又通过称为反向传播的过程帮助函数改变和调整权重和偏差以最小化成本。对于我们的示例神经网络实现,我们将使用MNIST数据集。图1.MNIST示例数据集MNIST就像“HelloWorld”数据集,因为它非常简洁地演示了神经网络的功能。数据集由手写数字组成,我们将训练神经网络对其进行识别和分类。这里Keras为了实现方便,我们将使用Keras框架。Keras是一种用Python编写的高级API,可在TensorFlow和Theano等流行框架上运行,为机器学习从业者提供抽象层以降低编写神经网络的固有复杂性。建议您深入研究Keras文档(https://keras.io/)以真正熟悉API。我还强烈推荐FrancoisChollet的书《用Python做深度学习》,这是本教程的灵感来源。是时候测试您的GPU了。我们将在本教程中使用Keras和TensorFlow后端,所以如果您还没有安装,现在就安装,只需在终端中运行这些命令。如果你不只是想了解简单的入门示例,最好自己搭建一个Anaconda环境,使用conda安装如下。pip3installKeraspip3installTensorflow你已经安装了你的第一个神经网络所需的一切,现在打开你常用的IDE,让我们导入我们需要的Python模块!fromkeras.datasetsimportmnistfromkerasimportmodelsfromkerasimportlayersfromkeras.utilsimportto_categoricalKeras有很多数据集可以用来帮助大家学习,对我们来说幸运的是有MNIST数据集。Models和Layers这两个模块帮助我们搭建神经网络,to_categorical用于数据编码,后面会详细介绍。现在我们已经导入了所需的模块,应该将数据集分成训练集和测试集。只需使用以下行即可。(train_images,train_labels),(test_images,test_labels)=mnist.load_data()在此示例中,我们的神经网络通过将其输出与标记数据进行比较来学习。把这个想象成我们让神经网络猜测大量手写数字,然后将猜测与实际标签进行比较。然后输入结果以帮助模型调整权重和偏差,从而使总成本最小化。训练集和数据集已创建,现在我们已准备好构建模型。network=models.Sequential()network.add(layers.Dense(784,activation='relu',input_shape=(28*28,)))network.add(layers.Dense(784,activation='relu',input_shape=(28*28,)))network.add(layers.Dense(10,activation='softmax'))network.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])这可能看起来像很多代码,但让我们分解一下。我们初始化一个名为网络的顺序模型。network=models.Sequential()然后我们添加神经网络层。对于这个例子,我们将使用密集层。密集层意味着每个神经元都接收来自前一层中所有神经元的输入。[784]和[10]指的是输出空间的维数,类似于后续层的输入数量;因为我们试图解决的分类问题有10个可能的类别(数字0到9),所以最后一层的潜在输出是10个单元。激活参数是指我们要使用的激活函数,激活函数实际上是根据给定的输入来计算输出。最后,28*28的输入shape是指图像的像素宽和高。network.add(layers.Dense(784,activation='relu',input_shape=(28*28,)))network.add(layers.Dense(784,activation='relu',input_shape=(28*28,)))network.add(layers.Dense(10,activation='softmax'))一旦定义了模型并添加了神经网络层,我们只需要使用选择的优化器、选择的损失函数和A度量来评估模型性能以编译该模型。network.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])恭喜!你刚刚建立了你的第一个神经网络!现在你可能还有几个问题,比如relu和什么是softmax?亚当是谁?这些都是值得思考的问题……我们会在以后的文章中对这些问题进行深入的解读。在将数据输入我们刚刚创建的模型之前,我们需要将输入整形为模型可以读取的格式。输入的原始形状是[60000,28,28],实际上代表60000个像素的高宽28x28图像。我们可以将数据重塑为训练[60000]图像和测试[10000]图像。train_images=train_images.reshape((60000,28*28))train_images=train_images.astype('float32')/255test_images=test_images.reshape((10000,28*28))test_images=test_images.astype('float32')/255除了整形数据,我们还需要对数据进行编码。对于这个例子,我们将使用分类编码,它实际上将许多特征转化为数字表示。train_labels=to_categorical(train_labels)test_labels=to_categorical(test_labels)我们的数据集已经被分成了训练集和测试集,编译了模型,对数据进行了整形和编码,现在我们准备好训练神经网络了!为此,我们调用fit函数,并传递所需的参数。network.fit(train_images,train_labels,epochs=5,batch_size=128)我们传递训练图像和它们的标签,传递轮数(epoch)和批量大小(batch_size),前者表示前后向传播的次数,后者表示每次向后/向前传递的训练样本数。我们还想设置性能指标来确定模型的运行情况。test_loss,test_acc=network.evaluate(test_images,test_labels)print('test_acc:',test_acc,'test_loss',test_loss)大功告成!您刚刚编写了神经网络,对数据集进行了整形和编码,并拟合了训练模型。如果您是第一次运行Python脚本,Keras将下载MNIST数据集并开始训练5轮。使用测试输出的训练时期,你应该有大约98%的测试准确率,这意味着模型在运行测试时正确预测数字的时间为98%,这对你的第一个神经网络来说不错!实际上最重要的是,如果您的模型过度拟合/欠拟合,您希望同时查看测试结果和训练结果以便提出好的想法。我们鼓励您调整层数、优化器、损失函数、轮数和批量大小,以查看每个因素如何影响模型的整体性能!原标题:WritingYourFirstNeuralNetinLessThan30LinesofCodewithKeras,作者:DavidGündisch【翻译稿件,合作站点转载请注明原译者和出处.com】