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

 深度学习初级课程

  • 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 pltplt.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 pltmodel = 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 layersmodel = 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.rhkb.cn/news/363508.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32 IWDG(独立看门狗)

1 IWDG简介 STM32有两个看门狗&#xff1a;一个是独立看门狗&#xff08;IWDG&#xff09;&#xff0c;另外一个是窗口看门狗。独立看门狗也称宠物狗&#xff0c;窗口看门狗也称警犬。本文主要分析独立看门狗的功能和它的应用。 独立看门狗用通俗一点的话来解释就是一个12位的…

在Ubuntu上安装VNC服务器教程

Ubuntu上安装VNC服务器方法&#xff1a;按照root安装TeactVnc&#xff0c;随后运行vncserver输入密码&#xff0c;安装并打开RickVNC客户端&#xff0c;输入服务器的IP&#xff0c;最后连接输入密码即可。 VNC或虚拟网络计算&#xff0c;可让您连接到远程Linux / Unix服务器的…

udp Socket组播 服务器

什么是组播 组播也可以称之为多播这也是 UDP 的特性之一。组播是主机间一对多的通讯模式&#xff0c;是一种允许一个或多个组播源发送同一报文到多个接收者的技术。组播源将一份报文发送到特定的组播地址&#xff0c;组播地址不同于单播地址&#xff0c;它并不属于特定某个主机…

laravel的日志使用说明

文章目录 了解系统的默认支持多个通道时它们的关系如何使用驱动默认日志是同步的 了解系统的默认支持 Laravel 日志基于「 通道 」和 「 驱动 」的。那么这个通道是干嘛的&#xff1f;驱动又是干嘛的&#xff1f; 通道 &#xff1a; 1.它表示了某种日志格式化的方式&#xff…

云动态摘要 2024-06-28

给您带来云厂商的最新动态&#xff0c;最新产品资讯和最新优惠更新。 最新优惠与活动 [新客专享]WeData 限时特惠 腾讯云 2024-06-21 数据分类分级管理&#xff0c;构建数据安全屏障 &#xff0c;仅需9.9元&#xff01; 云服务器ECS试用产品续用 阿里云 2024-04-14 云服务器…

游戏AI的创造思路-技术基础-深度学习(3)

继续填坑&#xff0c;本篇介绍深度学习中的长短期记忆网络~~~~ 目录 3.3. 长短期记忆网络&#xff08;LSTM&#xff09; 3.3.1. 什么是长短期记忆网络 3.3.2. 形成过程与运行原理 3.3.2.1. 细胞状态与门结构 3.3.2.2. 遗忘门 3.3.2.3. 输入门 3.3.2.4. 细胞状态更新 3.…

Younger 数据集:人工智能生成神经网络

设计和优化神经网络架构通常需要广泛的专业知识&#xff0c;从手工设计开始&#xff0c;然后进行手动或自动化的精细化改进。这种依赖性成为快速创新的重要障碍。认识到从头开始自动生成神经网络架构的复杂性&#xff0c;本文引入了Younger&#xff0c;这是一个开创性的数据集&…

机器学习python实践——关于管道模型Pipeline和网格搜索GridSearchCV的一些个人思考

最近在利用python跟着指导书进行机器学习的实践&#xff0c;在实践中使用到了Pipeline类方法和GridSearchCV类方法&#xff0c;并且使用过程中发现了一些问题&#xff0c;所以本文主要想记录并分享一下个人对于这两种类方法的思考&#xff0c;如果有误&#xff0c;请见谅&#…

Kubernetes 容器编排技术

Kubernetes 容器编排 前言 知识扩展 早在 2015 年 5 月&#xff0c;Kubernetes 在 Google 上的搜索热度就已经超过了 Mesos 和 Docker Swarm&#xff0c;从那儿之后更是一路飙升&#xff0c;将对手甩开了十几条街,容器编排引擎领域的三足鼎立时代结束。 目前&#xff0c;AWS…

蚂蚁- 定存

一&#xff1a;收益变动&&收益重算 1.1: 场景组合 1: 澳门元个人活期&#xff0c;日终余额大于0&#xff0c;当日首次、本周本月非首次系统结息&#xff0c;结息后FCDEPCORE_ASYN_CMD_JOB捞起进行收益计算 【depc_account_revenue_detail】收益日 > 【depc_accoun…

Linux驱动开发笔记(十一)tty子系统及其驱动

文章目录 前言一、串口驱动框架1.1 核心数据结构1.2 数据处理流程 二、驱动编写1. 设备树的修改2. 相关API函数3. 驱动框架4. 具体功能的实现4.1 出入口函数的编写4.2 读写函数 前言 之前已经讲过应用层的应用&#xff0c;接下来我们继续进行驱动的学习。其实实际上我们很少主动…

【Redis四】主从复制、哨兵以及Cluster集群

目录 一.主从复制、哨兵、集群的区别 二.Redis主从复制 1.作用 2.原理 3.流程 三.搭建Redis 主从复制 1.源码编译安装以及配置文件修改 1.1.修改 Redis 配置文件&#xff08;Slave节点操作&#xff09; 2.验证主从复制 2.1.在Master节点上看日志 2.2.在Master节点上…

学习感悟丨在誉天学习数通HCIP怎么样

大家好&#xff0c;我是誉天学员的徐同学&#xff0c;学习的数通HCIP课程。 在学校的时候&#xff0c;听说下半年就要出去实习了&#xff0c;心中坎坷不安&#xff0c;现在我学到的知识远远不够的。然后就想着学点东西充实一下自己的知识面和专业能力&#xff0c;有一次和同学谈…

有没有能用蓝牙的游泳耳机,性能超凡的4大游泳耳机力荐

在现代科技的推动下&#xff0c;越来越多具备蓝牙功能的游泳耳机正在改变游泳爱好者的体验方式。这些创新产品不仅在防水性能上有了显著提升&#xff0c;还能让您在水中享受到高质量的音乐。然而&#xff0c;选择一款优秀的蓝牙游泳耳机并不简单&#xff0c;需要考虑到防水等级…

vite vue3使用axios解决跨域问题

引入依赖 npm install axios 在main.js中全局引入 import { createApp } from vue import App from ./App.vue import axios from axiosconst app createApp(App)// 全局引入axios app.config.globalProperties.$axios axiosapp.mount(#app) 修改vite.config.js的代理配置…

Java | Leetcode Java题解之第189题轮转数组

题目&#xff1a; 题解&#xff1a; class Solution {public void rotate(int[] nums, int k) {k % nums.length;reverse(nums, 0, nums.length - 1);reverse(nums, 0, k - 1);reverse(nums, k, nums.length - 1);}public void reverse(int[] nums, int start, int end) {whil…

搭建企业内网pypi镜像库,让python在内网也能像互联网一样安装pip库

目录 知识点实验1.服务器安装python2.新建一个目录/mirror/pip&#xff0c;用于存储pypi文件&#xff0c;作为仓库目录3.下载python中的所需包放至仓库文件夹/mirror/pip3.1. 新建requirement.py脚本&#xff08;将清华pypi镜像库文件列表粘贴到requirement.txt文件中&#xff…

代码随想录算法训练营第三十七天|01背包问题、分割等和子集

01背包问题 题目链接&#xff1a;46. 携带研究材料 文档讲解&#xff1a;代码随想录 状态&#xff1a;忘了 二维dp 问题1&#xff1a;为啥会想到i代表第几个物品&#xff0c;j代表容量变化&#xff1f; 动态规划中&#xff0c;每次决策都依赖于前一个状态的结果&#xff0c;在…

Radxa 学习摘录

文章目录 1、参考资料2、硬件知识3、shell4、交叉编译工具链5、问题6、DTS 1、参考资料 技术论坛&#xff08;推荐&#xff09; 官方资料下载 wiki资料 u-boot 文档 u-boot 源码 内核文档 内核源码 原理图 radxa-repo radxa-build radxa-pkg radxa-docs 2、硬件知识 Rad…

RabbitMQ(七)Shovel插件对比Federation插件

文章目录 Shovel和Federation的主要区别&#xff08;重点&#xff09;一、启用Shovel插件二、配置Shovel三、测试1、测试计划2、测试效果发布消息源节点目标节点 Shovel和Federation的主要区别&#xff08;重点&#xff09; • Shovel更简洁一些 • Federation更倾向于跨集群使…