深度学习Python实战:用Python实现第一个深度学习程序!

深度学习是 2018-22 年度最热门的话题之一。近几年该行业取得了非常大的进步,可以说机器或计算机程序真正取代人类的时代已经到来。

在本文章,将使用 Python 进行深度学习的的实战,希望能帮助您了解深度学习到底是什么,以及它是如何实现的。

我将在本文中介绍以下主题:

  • 理论篇
    • 深度学习的作用
    • 什么是深度学习?
    • 感知器和人工神经网络
    • 深度学习的应用
    • 为什么用 Python 进行深度学习?
  • 实战篇
    • 使用 Python 进行深度学习:感知器示例
    • 使用 Python 进行深度学习:创建深度神经网络

理论篇

深度学习的作用

提起深度学习,首先需要了解机器学习。机器学习是迈向人工智能的第一步。它基于这样一种理论概念:即应该让机器自己学习和探索,逐步提升自己。从技术上讲,机器学习应该能够处理大型的数据集,并从大型数据集中提取模型。

机器学习的缺点:

  • 机器学习算法无法处理高维数据——高维数据会有大量的输入和输出:大约有数千个维度。处理此类数据会非常复杂并且耗费资源。我们称之为维数诅咒。

深度学习Python实战:用Python实现第一个深度学习程序!

  • 机器学习需要提取特征。这在预测结果以及提高准确性方面起着重要作用。因此,如果不进行特征提取,程序员就会面临巨大的挑战。另外特征的有效性在很大程度上取决于程序员的洞察力。

深度学习解决了机器学习的缺点。深度学习能够处理高维数据,并且能够自动提取正确、有效的特征。

什么是深度学习?

深度学习是机器学习的一个子集,它使用类似的机器学习的算法来训练深度神经网络,能够比机器学习达成更好的准确性。深度学习模仿了我们大脑的运作方式,即从经验中学习

深度学习Python实战:用Python实现第一个深度学习程序!

如你所知,我们的大脑由数十亿个神经元组成,使我们能够做出惊人的事情。即使是小孩的大脑也能解决即使使用超级计算机也很难解决的复杂问题。那么,我们如何才能在程序中实现相同的功能呢?现在,这就需要我们了解人工神经元(感知器)人工神经网络

感知器和人工神经网络

深度学习主要研究被称为脑细胞神经元大脑基本单位

首先,让我们了解生物神经元的功能,然后让我们了解如何通过感知机和人工神经网络模仿这种功能。

深度学习Python实战:用Python实现第一个深度学习程序!

如上图所示,生物神经元包含以下几个部分:

  • 树突: 接收来自其他神经元的信号
  • 单元体:对所有输入进行求和
  • 轴突:用于向其他细胞传递信号

人工神经元或感知器是用于二元分类的线性模型。它对具有一组输入的神经元建模,每个输入都被赋予特定的权重。神经元根据这些加权输入计算一些函数并给出输出。

深度学习Python实战:用Python实现第一个深度学习程序!

它接收 n 个输入(对应于每个特征)。然后它将这些输入相加,应用转换并产生输出。它有两个功能:

  • 求和
  • 转化(激活)

权重显示特定输入的有效性。输入的权重越大,对神经网络的影响就越大。另一方面,偏差是感知器中的一个附加参数,用于调整输出以及神经元输入的加权和,从而以最适合给定数据的方式帮助模型。

激活函数将输入转化为输出。它使用阈值来产生输出。有许多函数用作激活函数,例如:

  • 线性或恒等式
  • 单位或二进制步骤
  • 乙状结肠或逻辑
  • 坦赫
  • ReLU
  • 软最大

如果你认为 Perceptron 解决了问题,那你就错了。有两个主要问题:

  • 单层感知器无法对非线性可分数据点进行分类。
  • 单层感知器无法解决涉及大量参数的复杂问题。

考虑此处的示例以及营销团队做出决策所涉及的参数的复杂性。

深度学习Python实战:用Python实现第一个深度学习程序!

一个神经元,不能接受这么多输入,这就是为什么要使用多个神经元来解决这个问题。神经网络实际上只是感知器的组合,以不同的方式连接并在不同的激活函数上运行。

深度学习Python实战:用Python实现第一个深度学习程序!

  • 输入节点 向网络提供来自外部世界的信息,统称为“输入层”。
  • 隐藏节点 执行计算并将信息从输入节点传输到输出节点。隐藏节点的集合形成一个“隐藏层”。
  • 输出节点统称为“输出层”,负责计算和将信息从网络传输到外界。

现在您已经了解了感知器的行为方式、所涉及的不同参数以及神经网络的不同层,让我们继续这篇用 Python 进行深度学习的博客,看看深度学习的一些很酷的应用。

深度学习的应用

深度学习在行业中有多种应用,以下是我们日常任务中的一些重要应用。

  • 语音识别
  • 机器翻译
  • 面部识别和自动标记
  • 虚拟个人助理
  • 自动驾驶汽车
  • 聊天机器人

为什么用 Python 进行深度学习?

  • Python就是这样一种具有独特属性的工具,它是一种通用编程语言,在分析和定量计算方面易于使用。
  • 这很容易理解
  • Python 是动态类型的
  • 巨大的社区支持
  • 用于不同目的的大量库,例如Numpy、Seaborn、Matplotlib、Pandas 和 Scikit-learn

深度学习Python实战:用Python实现第一个深度学习程序!

现在理论已经足够了,让我们看看如何通过一个小而令人兴奋的例子开始使用 Python 进行深度学习。

使用 Python 进行深度学习:感知器示例

现在我相信你们一定熟悉“或”门的工作原理。如果任何输入也 为 1,则输出为1 。

深度学习Python实战:用Python实现第一个深度学习程序!

因此,感知器可以用作分隔符或决策线,将或门的输入集分为两类:

  • 第 1 类:输入的输出为 0,位于决策线下方。
  • 第 2 类:输入的输出为 1,位于决策线或分隔符上方。

到目前为止,我们了解到线性感知器可用于将输入数据集分为两类。但是,它实际上是如何对数据进行分类的呢?

深度学习Python实战:用Python实现第一个深度学习程序!

在数学上,感知器可以被认为是权重、输入和偏差的方程式。

第 1 步:导入所有需要的库

在这里,我们只需要导入一个库,即 tensorflow 。

import tensorflow as tf

第 2 步:为输入和输出定义向量变量

接下来,我们需要创建变量来存储感知器的输入、输出和偏差。

train_in = [
[0,0,1],
[0,1,1],
[1,0,1],
[1,1,1]]

train_out = [
[0],
[1],
[1],
[1]]

第 3 步:定义权重变量

在这里,我们将为我们的权重定义形状为 3×1 的张量变量,并为其初始分配一些随机值。

w = tf.Variable(tf.random_normal([3, 1], seed=15))

第 4 步:定义输入和输出的占位符

我们需要定义占位符,以便它们可以在运行时接受外部输入。

x = tf.placeholder(tf.float32,[None,3])
y = tf.placeholder(tf.float32,[None,1])

第 5 步:计算输出和激活函数

如前所述,感知器接收到的输入首先乘以各自的权重,然后将所有这些加权输入相加。然后将该求和值馈送到激活以获得最终结果。

深度学习Python实战:用Python实现第一个深度学习程序!

output = tf.nn.relu(tf.matmul(x, w))

注意:在本例中,我使用了 relu 作为我的激活函数。您可以根据需要自由使用任何激活功能。

第 6 步:计算成本或误差

我们需要计算 Cost = Mean Squared Error,它只是感知器输出与期望输出之差的平方。

loss = tf.reduce_sum(tf.square(output - y))

第 7 步:最小化错误

感知器的目标是最小化损失或成本或错误。所以在这里我们将使用梯度下降优化器。

optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)

第 8 步:初始化所有变量

变量仅使用tf.Variable 定义。所以,我们需要对定义的变量进行初始化。

init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)

第 9 步:迭代训练感知器

我们需要训练我们的感知器,即在连续迭代中更新权重和偏差值,以最小化错误或损失。在这里,我将在 100 个时期内训练我们的感知器。

for i in range(100):
sess.run(train, {x:train_in,y:train_out})
cost = sess.run(loss,feed_dict={x:train_in,y:train_out})
print('Epoch--',i,'--loss--',cost)

第 10 步:输出

op-2

……

……

op-2

如您所见,损失从2.07开始,到0.27结束。

使用 Python 进行深度学习:创建深度神经网络

现在我们已经成功地创建了一个感知器并将其训练为一个或门。让我们继续这篇文章,看看如何从头开始创建我们自己的神经网络,我们将在其中创建输入层、隐藏层和输出层。

我们将使用 MNIST 数据集。MNIST 数据集由60,000 个训练样本和10,000 个手写数字图像测试样本组成。图像大小为28×28 像素,输出可以介于0-9之间。

这里的任务是训练一个可以准确识别图像上数字的模型。

深度学习Python实战:用Python实现第一个深度学习程序!

首先,我们将使用下面的导入将打印函数从 Python 3 引入到 Python 2.6+。future 语句需要靠近文件的顶部,因为它们改变了语言的基本内容,因此编译器需要从一开始就知道它们。

from __future__ import print_function

以下是每一步都带有注释的代码:

# Import MNIST data
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("/tmp/data/", one_hot=True)

import tensorflow as tf
import matplotlib.pyplot as plt

# Parameters
learning_rate = 0.001
training_epochs = 15
batch_size = 100
display_step = 1

# Network Parameters
n_hidden_1 = 256 # 1st layer number of features
n_hidden_2 = 256 # 2nd layer number of features
n_input = 784 # MNIST data input (img shape: 28*28)
n_classes = 10 # MNIST total classes (0-9 digits)

# tf Graph input
x = tf.placeholder("float", [None, n_input])
y = tf.placeholder("float", [None, n_classes])

# Create model
def multilayer_perceptron(x, weights, biases):
    # Hidden layer with RELU activation
    layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])
    layer_1 = tf.nn.relu(layer_1)
    # Hidden layer with RELU activation
    layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])
    layer_2 = tf.nn.relu(layer_2)
    # Output layer with linear activation
    out_layer = tf.matmul(layer_2, weights['out']) + biases['out']
    return out_layer

# Store layers weight & bias
weights = {
    'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])),
    'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])),
    'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes]))
}

biases = {
    'b1': tf.Variable(tf.random_normal([n_hidden_1])),
    'b2': tf.Variable(tf.random_normal([n_hidden_2])),
    'out': tf.Variable(tf.random_normal([n_classes]))
}

# Construct model
pred = multilayer_perceptron(x, weights, biases)

# Define loss and optimizer
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=y))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)

# Initializing the variables
init = tf.global_variables_initializer()

#create an empty list to store the cost history and accuracy history
cost_history = []
accuracy_history = []

# Launch the graph
with tf.Session() as sess:
    sess.run(init)

    # Training cycle
    for epoch in range(training_epochs):
        avg_cost = 0.
        total_batch = int(mnist.train.num_examples/batch_size)
        # Loop over all batches
        for i in range(total_batch):
            batch_x, batch_y = mnist.train.next_batch(batch_size)

            # Run optimization op (backprop) and cost op (to get loss value)
            _, c = sess.run([optimizer, cost], feed_dict={x: batch_x,y: batch_y})
            # Compute average loss
            avg_cost += c / total_batch
        # Display logs per epoch step
        if epoch % display_step == 0:

            correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))
            # Calculate accuracy
            accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
            acu_temp = accuracy.eval({x: mnist.test.images, y: mnist.test.labels})
            #append the accuracy to the list
            accuracy_history.append(acu_temp)
            #append the cost history
            cost_history.append(avg_cost)
            print("Epoch:", '%04d' % (epoch + 1), "- cost=", "{:.9f}".format(avg_cost), "- Accuracy=",acu_temp)

    print("Optimization Finished!")
    #plot the cost history
    plt.plot(cost_history)
    plt.show()
    #plot the accuracy history
    plt.plot(accuracy_history)
    plt.show()

    # Test model
    correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))
    # Calculate accuracy
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
    print("Accuracy:", accuracy.eval({x: mnist.test.images, y: mnist.test.labels}))

输出:

深度学习Python实战:用Python实现第一个深度学习程序!

final-graph

现在,我们结束了这篇用 Python 进行深度学习的文章。我希望您了解深度学习的各个组成部分,它是如何开始的以及我们如何使用 Python 创建一个简单的感知器和深度神经网络。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深度学习Python实战:用Python实现第一个深度学习程序! - Python技术站

(0)
上一篇 2022年12月5日 下午8:03
下一篇 2022年12月6日 下午8:39

相关文章

  • 深度学习–项目提炼1

    1、处理数据:避免原数据被感染,将原数据copy,标记缺失值,用热力图,去掉多余的字段 2、清洗数据:copy处理的数据,然后进行删除字段和删除重复的字段 3、划分测试、训练集:copy 测试集和训练集,再给缺失的值里面填充中位数、众数 处理数据 1 #求补集(对应索引不一致的数据) 2 ls = [“tom”,”name”,3] 3 ls2 = [7,”n…

    2023年4月10日
    00
  • 人工智能——深度学习介绍

        AI系统需要具备自己获取知识的能力,即从原始数据中提取模式的能力,这种能力被称为机器学习。     一个称为逻辑回归的简单机器学习算法可以可以决定是否跑妇产,这种能力被称为逻辑回归。     区分垃圾电子邮件和合法电子邮件,这种能力的算法是朴素贝叶斯算法。     这些简单的机器学习算法的性能在很大程度上依赖于给定数据的表示。     表示学习算法的…

    深度学习 2023年4月10日
    00
  • Kienct与Arduino学习笔记(2) 深度图像与现实世界的深度图的坐标

    转载请注明出处:http://blog.csdn.net/lxk7280 首先,要接触一下KinectOrbit这个摄像机库,这篇文章中有这个库的下载网址和简单的介绍:http://blog.csdn.net/lxk7280/article/details/38184355。将下载得到的文件放到对应的Processing的一个子目录后,就可以使用。    K…

    深度学习 2023年4月13日
    00
  • 深度学习模型压缩与优化加速

    转自:https://blog.csdn.net/baidu_31437863/article/details/84474847 深度学习(Deep Learning)因其计算复杂度或参数冗余,在一些场景和设备上限制了相应的模型部署,需要借助模型压缩、优化加速、异构计算等方法突破瓶颈。 模型压缩算法能够有效降低参数冗余,从而减少存储占用、通信带宽和计算复杂度…

    深度学习 2023年4月13日
    00
  • 什么是深度学习?它能解决什么问题?

    深度学习是什么? 深度学习既指深度神经网络,也指机器学习的其他分支,如深度强化学习。一般来说,它通常指的是深度神经网络。 神经网络是一组算法,大致模仿人脑,旨在识别模式。他们通过一种机器感知,标记或聚类原始的输入来解释感官数据。它们识别的模式是数字的,包含在矢量中。所有现实世界的数据,无论是图像、声音、文本还是时间序列,都必须转换成矢量。 神经网络可以帮助我…

    2022年11月10日 深度学习
    10
  • 深度学习(四)之电影评论分类

    任务目标 对中文电影评论进行情感分类,实现测试准确率在\(83\%\)以上。本文采用了3种模型对电影评论进行分类,最终,模型在测试集的结果分别为: 模型 acc precision recall f1-score LSTM \(81.57\%\) [\(77.49\%\),\(86.69\%\)] [\(88.46\%\),\(74.87%\)] [\(82…

    深度学习 2023年4月12日
    00
  • 《机器翻译 统计建模与深度学习方法》 __肖桐 学习第二天 【机器翻译基础】

    1、董振东先生对机器翻译方法的评价: 基于规则和实例的机器翻译是傻子(依赖一定人工,在匹配规则和模板的情况下翻译质量高,但是系统泛华能力有限),统计和神经机器翻译是疯子(只依赖数据,系统健硕性强,但是精度不稳定且翻译过程难以人工干预)。 2、翻译质量评价:   有参考答案的评价:在参考答案或者评价标准已知的情况下对译文进行打分;   无参考答案的评价:在没有…

    深度学习 2023年4月11日
    00
  • 深度学习网络调参技巧

    https://zhuanlan.zhihu.com/p/24720954?utm_source=zhihu&utm_medium=social 转载请注明:炼丹实验室 之前曾经写过一篇文章,讲了一些深度学习训练的技巧,其中包含了部分调参心得:深度学习训练心得。不过由于一般深度学习实验,相比普通机器学习任务,时间较长,因此调参技巧就显得尤为重要。同时个人实践…

    深度学习 2023年4月13日
    00

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

合作推广
合作推广
分享本页
返回顶部