深度学习 —— 1.单一神经元

news2024/11/8 14:17:55

 深度学习初级课程

  • 1.单一神经元
  • 2.深度神经网络
  • 3.随机梯度下降法
  • 4.过拟合和欠拟合
  • 5.剪枝、批量标准化
  • 6.二分类

 

前言


本套课程仍为 kaggle 课程《Intro to Deep Learning》,仍按之前《机器学习》系列课程模式进行。前一系列《Keras入门教程》内容,与本系列有部分重复内容,但重点在于快速入门深度学习中的keras 使用,即从代码入手,快速掌握代码的使用,原理讲得很少。
从原理入手,一步一代码,如果进行建模型的整个过程。

内容

欢迎来到深度学习!

欢迎来到 kaggle 的深度学习课程介绍!你就要学会开始构建自己的深度神经网络所需的一切。使用Keras和Tensorflow,您将学习如何:

  • 创建一个完全连接的神经网络架构
  • 将神经网络应用于两个经典的机器学习问题:回归和分类
  • 用随机梯度下降法训练神经网络,以及
  • 通过剪枝、批量标准化和其他技术提高性能
什么是深度学习?


近年来,人工智能领域最令人印象深刻的一些进展是在深度学习领域。自然语言翻译、图像识别和游戏都是深度学习模型接近甚至超过人类水平的任务。

那么什么是深度学习呢?深度学习是一种机器学习方法,其特点是计算量大。这种计算深度使深度学习模型能够解开在最具挑战性的现实世界数据集中发现的各种复杂和分层模式。

神经网络凭借其强大的功能和可扩展性,已经成为深度学习的定义模型。神经网络由神经元组成,每个神经元单独执行一个简单的计算。神经网络的力量来自于这些神经元所能形成的复杂连接。

线性单位

让我们从神经网络的基本组成部分开始:单个神经元。如图所示,只有一个输入的神经元(或单元)如下所示:

线性单位:y = w x + b

输入是 x ,它与神经元的连接有一个权重(weight),即w 。每当一个值流经一个连接时,你就用该连接的权重乘以该值。对于输入x ,到达神经元的是w ∗ x 。神经网络通过修改其权重来“学习”。

b 是一种特殊的权重,我们称之为偏差(bias)。偏差没有任何与之相关的输入数据;相反,我们把1 放在图中,这样到达神经元的值就是b (因为1 ∗ b = b )。偏压使神经元能够独立于输入修改输出。

y是神经元最终输出的值。为了得到输出,神经元将通过其连接接收到的所有值相加。这个神经元的激活是y = w ∗ x + b ,或者用公式y = w x + b 。

公式 y = w x + b 看起来熟悉吗?
这是一个直线方程,这是斜率截距方程,其中w 是斜率,b 是y截距。

示例-线性单元作为模型

虽然单个神经元通常只作为更大网络的一部分发挥作用,但从单个神经元模型开始作为基线通常是有用的。单神经元模型就是线性模型。

让我们思考一下,这在80种谷物这样的数据集上是如何工作的。训练一个以“糖”(每份糖的克数)为输入,以“卡路里”(每份卡路里)为输出的模型,我们可能会发现偏差为 b = 90,重量为 w = 2.5。我们可以这样估计每餐含5克糖的谷物的卡路里含量:

而且,对照我们的配方,我们的卡路里 = 2.5 × 5 + 90 = 102.5 ,就像我们预期的那样。

多输入

80 谷物数据集的功能远不止“糖”。如果我们想把模型扩展到包括纤维或蛋白质含量这样的东西呢?这很容易。我们可以给神经元增加更多的输入连接,每增加一个功能就增加一个。为了找到输出,我们将每个输入乘以其连接权重,然后将它们相加。
三个输入连接:x 0 、x 1 和 x 2 ,以及偏置b。

有三个输入的线性单元。

这个神经元的公式是y = w 0 x 0 + w 1 x 1 + w 2 x 2 + b 具有两个输入的线性单元将适合一个平面,而具有更多输入的单元将适合一个超平面。

Keras中的线性单位

在Keras中创建模型的最简单方法是通过Keras的 Sequential,它创建一个神经网络作为一个层堆栈。我们可以使用密集层(我们将在下一节中了解更多)创建类似上述模型的模型。

我们可以定义一个线性模型,接受三个输入特征(“糖sugars”、“纤维fiber”和“蛋白质protein”),并产生单一输出(“卡路里calories”),如下所示:

from tensorflow import keras
from tensorflow.keras import layers

# Create a network with 1 linear unit
model = keras.Sequential([
    layers.Dense(units=1, input_shape=[3])
])

通过第一个参数units,我们定义了需要多少输出。在这种情况下,我们只是预测“卡路calories”,所以我们将使用units=1。对于第二个参数input_shape,我们告诉Keras输入的维度。设置input_shape=[3]可确保模型将接受三个特征作为输入(“糖”、“纤维”和“蛋白质”)。

这个模型现在可以适应训练数据了!

为什么input_shape是Python列表?
我们将在本课程中使用的数据是表格数据,比如熊猫数据框。对于数据集中的每个功能,我们将有一个输入。这些特性是按列排列的,所以我们总是有input_shape=[num_columns]。Keras在这里使用列表的原因是允许使用更复杂的数据集。例如,图像数据可能需要三个维度:[高度、宽度、通道]。

轮到你了

为红酒质量数据集定义一个线性模型。


练习部分

介绍

在教程中,我们学习了神经网络的构建模块:线性单元。我们看到,只有一个线性单元的模型将线性函数拟合到数据集(相当于线性回归)。在本练习中,您将构建一个线性模型,并在Keras中练习使用模型。

在开始之前,运行下面的代码单元来设置所有内容。

# Setup plotting
import matplotlib.pyplot as plt

plt.style.use('seaborn-whitegrid')
# Set Matplotlib defaults
plt.rc('figure', autolayout=True)
plt.rc('axes', labelweight='bold', labelsize='large',
       titleweight='bold', titlesize=18, titlepad=10)

# Setup feedback system
from learntools.core import binder
binder.bind(globals())
from learntools.deep_learning_intro.ex1 import *

红酒质量数据集由大约1600种葡萄牙红酒的理化测量数据组成。此外,还包括盲品测试中每种葡萄酒的质量评级。
首先,运行下一个单元格以显示此数据集的前几行。

import pandas as pd
​
red_wine = pd.read_csv('../input/dl-course-data/red-wine.csv')
red_wine.head()

可以使用shape属性获取数据帧(或Numpy数组)的行数和列数。

red_wine.shape # (rows, columns)

(1599, 12)

1) 输入维度

通过理化测量,我们能很好地预测葡萄酒的感知质量吗?
目标是“质量”,剩下的列是特性。在这项任务中,如何设置Keras模型的input_shape参数?

# YOUR CODE HERE
input_shape = ____

# Check your answer
q_1.check()
2) 定义一个线性模型

现在定义一个适合此任务的线性模型。注意模型应该有多少输入和输出。

from tensorflow import keras
from tensorflow.keras import layers

# YOUR CODE HERE
model = ____

# Check your answer
q_2.check()

3) 查看权重
在内部,Keras用张量表示神经网络的权重。张量基本上是TensorFlow版本的Numpy数组,有一些差异使它们更适合深度学习。其中最重要的一点是张量与GPU(GPU)和TPU(TPU)加速器兼容。事实上,TPU是专门为张量计算而设计的。
模型的权重作为张量列表保存在其权重属性中。获取上面定义的模型的权重。

# YOUR CODE HERE
w, b = w, b = _____
​
# Check your answer
q_3.check()
Weights
<tf.Variable 'dense/kernel:0' shape=(11, 1) dtype=float32, numpy=
array([[ 0.54436415],
       [-0.14202559],
       [ 0.6889222 ],
       [ 0.2318945 ],
       [-0.6457067 ],
       [ 0.40594786],
       [ 0.04871047],
       [-0.20195675],
       [ 0.20735556],
       [ 0.13860786],
       [-0.18090099]], dtype=float32)>

Bias
<tf.Variable 'dense/bias:0' shape=(1,) dtype=float32, numpy=array([0.], dtype=float32)>

正确:你看到每个输入都有一个权重(和一个偏差)了吗?但是请注意,权重值似乎没有任何模式。在训练模型之前,权重设置为随机数(偏差设置为0.0)。神经网络通过寻找更好的权值进行学习。

(顺便说一句,Keras将权重表示为张量,但也使用张量表示数据。当您设置input_shape参数时,您告诉Keras它应该为训练数据中的每个示例预期的数组维度。设置input_shape=[3]将创建一个接受长度为3的向量的网络,如[0.2,0.4,0.6])

可选:绘制未经训练的线性模型的输出


我们将在第5课中学习的这类问题是回归问题,目标是预测一些数值目标。回归问题就像“曲线拟合”问题:我们试图找到一条最适合数据的曲线。让我们看看线性模型产生的“曲线”。(你可能已经猜到这是一条线了!)
我们提到,在训练之前,模型的权重是随机设置的。运行下面的单元格几次,查看随机初始化生成的不同行。(这个练习没有编码——只是一个演示。)

import tensorflow as tf
import matplotlib.pyplot as plt

model = keras.Sequential([
    layers.Dense(1, input_shape=[1]),
])

x = tf.linspace(-1.0, 1.0, 100)
y = model.predict(x)

plt.figure(dpi=100)
plt.plot(x, y, 'k')
plt.xlim(-1, 1)
plt.ylim(-1, 1)
plt.xlabel("Input: x")
plt.ylabel("Target y")
w, b = model.weights # you could also use model.get_weights() here
plt.title("Weight: {:0.2f}\nBias: {:0.2f}".format(w[0][0], b[0]))
plt.show()

继续前进

在第2课中添加隐藏层并使模型深入。


答案
# 1)输入维度
input_shape = [11]
# you could also use a 1-tuple, like input_shape = (11,)
# 也可以输入元组模式

# 2)定义线性模型
from tensorflow import keras
from tensorflow.keras import layers

model = keras.Sequential([
    layers.Dense(units=1, input_shape=[11])
])

# 3)查看权重
w, b = model.weights
print("Weights\n{}\n\nBias\n{}".format(w, b))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1861705.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

eNSP中三层交换机的配置和使用

一、拓扑图 1.新建拓扑图 2.PC端配置 PC1: PC2&#xff1a; 二、基本命令配置 1.S1配置 <Huawei>system-view [Huawei]sysname S1 [S1]vlan 10 //在交换机 S1 上创建 VLAN 10 [S1-vlan10]vlan 20 // 在交换机 S1 上创建 VLAN 20 [S1-vlan20]quit //退出 VLAN 配置…

基于JSP的在线教育资源管理系统

开头语&#xff1a; 你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果你对在线教育资源管理系统感兴趣或者有相关需求&#xff0c;欢迎在文末找到我的联系方式。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;IDE、N…

基于Java仓储出入库管理系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f;感兴趣的可以先收藏起来&#xff0c;还…

代码随想录第34天|贪心算法

59.合并区间 class Solution { public:struct cmp{bool operator()(vector<int>& a, vector<int>& b) {return a[0] < b[0];}};vector<vector<int>> merge(vector<vector<int>>& intervals) {if (intervals.size() 1)retu…

六款顶级原型设计工具推荐,满足你所有需求!

即时设计作为一款专业原型工具&#xff0c;无论是从功能还是插件库配备情况来看&#xff0c;都是毫无疑问可以进行原型图设计的&#xff0c;而且&#xff0c;即时设计内设海量资源库&#xff0c;可以支持大家通过关键词进行搜索相关资源&#xff0c;并且在线编辑使用&#xff0…

Zookeeper:分布式系统中的协调者

Zookeeper&#xff1a;分布式系统中的协调者 前言&#xff1a;引言Zookeeper是什么&#xff1f; 基本概念Zookeeper 数据模型Znode 类型会话Watcher 应用场景分布式锁配置维护组服务名字服务 典型应用场景数据发布/订阅负载均衡命名服务分布式协调/通知集群管理Master选举 工作…

Open3D kitti数据集bin与pcd的相互转换

目录 一、Kitti数据集简介 1.1数据集内容 1.2数据集结构 二、代码实现 2.1bin转pcd 2.2pcd转bin 三、实现效果 一、Kitti数据集简介 KITTI 数据集是由德国卡尔斯鲁厄理工学院&#xff08;KIT&#xff09;和丰田美国技术研究院&#xff08;Toyota Technological Institut…

昇思25天学习打卡营第2天|快速入门

使用MindSpore实现简单的深度学习模型 环境配置 第一步当然是装包&#xff1a; !pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore2.2.14 import mindspore from mindspore import nn from mindspore.dataset import vision, transforms from mindspore.d…

深入了解MySQL的哈希索引

深入了解MySQL的哈希索引 哈希索引是一种基于哈希表的数据结构&#xff0c;通过对索引键值进行哈希运算&#xff0c;直接定位存储位置&#xff0c;从而实现快速数据访问。哈希索引在等值查询中表现尤为出色&#xff0c;但不适用于范围查询。虽然哈希索引在某些场景下可以显著提…

从特斯拉视角,看智能驾驶研究框架

第一章:回顾历史&#xff0c;智能驾驶的核心主线是算法的演进史&#xff0c;从2017年至今在感知侧规控侧实现算法从规则为主走向端到端。算法方面&#xff0c;2017-2022年&#xff0c;特斯拉在感知侧走向端到端&#xff0c;实现BEVTransformerOccupancy。2021-2023年&#xff0…

Python深度学习技术

原文链接&#xff1a;Python深度学习技术 近年来&#xff0c;伴随着以卷积神经网络&#xff08;CNN&#xff09;为代表的深度学习的快速发展&#xff0c;人工智能迈入了第三次发展浪潮&#xff0c;AI技术在各个领域中的应用越来越广泛。Transformer模型&#xff08;BERT、GPT-…

2024年最新中级会计职称考试题库。

46.甲将一汇票背书转让给乙&#xff0c;但该汇票上未记载乙的名称。其后&#xff0c;乙在该汇票被背书人栏内记载了自己的名称。根据《票据法》的规定&#xff0c;下列有关该汇票背书与记载效力的表述中&#xff0c;正确的是&#xff08;&#xff09;。 A.甲的背书无效&#x…

C语言:sprintf与snprintf

C语言提供了强大的格式化输出的接口&#xff0c;可以输出到不同的文件或者字符串等&#xff0c;以sprintf和snprintf为例介绍一下 sprintf 格式化输出到字符串 函数签名 int sprintf(char *str, const char *format, ...);与printf相比就是多了前面的char*参数&#xff0c;…

创新降重工具助力学术写作:提升论文独创性

现在大部分学校已经进入到论文查重降重的阶段了。如果查重率居高不下&#xff0c;延毕的威胁可能就在眼前。对于即将告别校园的学子们&#xff0c;这无疑是个噩梦。四年磨一剑&#xff0c;谁也不想在最后关头功亏一篑。 查重率过高&#xff0c;无非以下两种原因。要么是作为“…

【激光雷达使用记录】—— 如何在ubuntu中利用ros自带的rviz工具实时可视化雷达点云的数据

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、查看雷达数据的 frame_id1. 查看雷达数据的话题2. 查看数据的frame_id 二、可视化雷达数据总结 前言 RViz&#xff08;ROS Visualization&#xff09;是机…

华为面试题及答案——机器学习(二)

21. 如何评价分类模型的优劣? (1)模型性能指标 准确率(Accuracy): 定义:正确分类的样本数与总样本数之比。适用:当各类样本的数量相对均衡时。精确率(Precision): 定义:预测为正类的样本中实际为正类的比例。适用:当关注假阳性错误的成本较高时(例如垃圾邮件检测…

超细毛搭配超宽设计,一款更呵护牙龈的牙刷

牙龈敏感的时候&#xff0c;刷牙特别难受&#xff0c;最近试了试惠百施&#xff08;EBISU&#xff09;65孔宽头软毛牙刷&#xff0c;感觉它的口腔护理体验很不错。这款牙刷的设计独特&#xff0c;采用宽头设计&#xff0c;一次就能刷两排牙齿&#xff0c;极大地提高了清洁效率。…

2024广东省职业技能大赛云计算赛项实战——集群部署GitLab

集群部署GitLab 前言 题目是这样的&#xff1a; 在Kubernetes集群中新建命名空间gitlab-ci&#xff0c;将GitLab部署到该命名空间下&#xff0c;Deployment和Service名称均为gitlab&#xff0c;以NodePort方式将80端口对外暴露为30880&#xff0c;设置GitLab服务root用户的密…

windows系统修改克隆虚拟机的SID(报错:尝试将此计算机配置为域控制器时出错)

当我们用克隆虚拟机加入域的时候&#xff0c;可能会出现图下所示报错。这时我们可以用微软自带的工具sysprep来修改机器的SID来解决该问题 注意&#xff1a;用sysprep修改SID之后&#xff0c;系统会自动重启&#xff0c;之前配置好的网络、修改过的机器名会重置。所以&#xff…