num

线性回归-pytorch

我的梦境 提交于 2020-02-15 00:28:55
线性回归 主要内容包括: 线性回归的基本要素 线性回归模型从零开始的实现 线性回归模型使用pytorch的简洁实现 线性回归的基本要素 模型 为了简单起见,这里我们假设价格只取决于房屋状况的两个因素,即面积(平方米)和房龄(年)。接下来我们希望探索价格与这两个因素的具体关系。线性回归假设输出与各个输入之间是线性关系: p r i c e = w a r e a ⋅ a r e a + w a g e ⋅ a g e + b \mathrm{price} = w_{\mathrm{area}} \cdot \mathrm{area} + w_{\mathrm{age}} \cdot \mathrm{age} + b p r i c e = w a r e a ​ ⋅ a r e a + w a g e ​ ⋅ a g e + b 数据集 我们通常收集一系列的真实数据,例如多栋房屋的真实售出价格和它们对应的面积和房龄。我们希望在这个数据上面寻找模型参数来使模型的预测价格与真实价格的误差最小。在机器学习术语里,该数据集被称为训练数据集(training data set)或训练集(training set),一栋房屋被称为一个样本(sample),其真实售出价格叫作标签(label),用来预测标签的两个因素叫作特征(feature)。特征用来表征样本的特点。 损失函数 在模型训练中

分治算法讲解与应用

痞子三分冷 提交于 2020-02-15 00:24:52
分治算法 分治算法的基本步骤 @author:qyx 2013/6/3 分治法在每一层递归上都有三个步骤 1) 分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题 2) 解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题 3) 合并:将各个子问题地解合并为原问题地解 使用分治算法求解汉诺塔问题: 可以把求解过程分为三步: 1 如果有一个盘 A->C 2 如果盘子数超过两个,我们总是可以看做是两个盘,1最下边的盘,2 上面的盘 1) 先把最上面的盘A->B 2) 把最下边的盘A->C 3) 把B塔的所有盘从B->C package com.qyx.dac; public class Hanoitower { public static void main(String[] args) { hanoitower(5, 'A', 'B', 'C'); } //汉诺塔的移动方法 //使用分治算法 public static void hanoitower(int num,char a,char b,char c) { //如果只有一个盘 if(num==1) { System.out.println("第一个盘从"+a+"->"+c); }else{ //如果盘的数量大于2,那么我可以看做是两个盘:1 最下边的盘 2 上面的盘 //1 先把最上面的盘A-

LeetCode 12. Integer to Roman

和自甴很熟 提交于 2020-02-15 00:05:07
题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。 通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况: I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。 X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。 给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。 示例 1: 输入: 3 输出: “III” 示例 2: 输入: 4 输出: “IV” 示例 3: 输入: 9 输出: “IX” 示例 4: 输入: 58 输出: “LVIII” 解释: L = 50, V = 5, III = 3. 示例 5: 输入: 1994 输出: “MCMXCIV” 解释:

第一次打卡

萝らか妹 提交于 2020-02-14 23:20:32
两种采样方式,代码参考boyu 随机采样 import torch import random def data_iter_random ( corpus_indices , batch_size , num_steps , device = None ) : # 减1是因为对于长度为n的序列,X最多只有包含其中的前n - 1个字符 num_examples = ( len ( corpus_indices ) - 1 ) // num_steps # 下取整,得到不重叠情况下的样本个数 example_indices = [ i * num_steps for i in range ( num_examples ) ] # 每个样本的第一个字符在corpus_indices中的下标 random . shuffle ( example_indices ) def _data ( i ) : # 返回从i开始的长为num_steps的序列 return corpus_indices [ i : i + num_steps ] if device is None : device = torch . device ( 'cuda' if torch . cuda . is_available ( ) else 'cpu' ) for i in range ( 0 , num

笔记:相邻采样

a 夏天 提交于 2020-02-14 23:00:00
在相邻采样中,相邻的两个随机小批量在原始序列上的位置相毗邻。 def data_iter_consecutive ( corpus_indices , batch_size , num_steps , device = None ) : if device is None : device = torch . device ( 'cuda' if torch . cuda . is_available ( ) else 'cpu' ) corpus_len = len ( corpus_indices ) // batch_size * batch_size # 保留下来的序列的长度 corpus_indices = corpus_indices [ : corpus_len ] # 仅保留前corpus_len个字符 indices = torch . tensor ( corpus_indices , device = device ) indices = indices . view ( batch_size , - 1 ) # resize成(batch_size, ) batch_num = ( indices . shape [ 1 ] - 1 ) // num_steps for i in range ( batch_num ) : i = i * num_steps

0214打卡作业【剑指offer】03.数组中重复的数字【python】

試著忘記壹切 提交于 2020-02-14 22:57:52
题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 题目链接 解题思路 思路一: 使用哈希表记录每个元素出现的次数,当出现的次数超过1,则说明该数字重复 时间复杂度:O(n),空间复杂度:O(n) 思路二: 思路一,虽然简单明了,但是没有充分利用题目所给的条件。 题目中给定数组中的n个元素所在的区间是0~n-1,则我们可以将数组中每个元素分别放入对应的元素,当我们发现进行交换的两个元素之间相等时,说明该元素重复。 时间复杂度:O(n),空间复杂度:O(1) 思路三: 思路二,虽然该方法空间复杂度减小,但是却改变原来数组中元素的顺序。这个时候我们采用思路三,既可以保持O(1)的空间复杂度,又没有改变原始数组的顺序。 由于元素中的每一个元素都小于n了,则该方法将每一个元素所对应位置上的元素加上n,如果发现某个位置上的元素对对应的位置上的元素大于n(已经被增加n)时,说明该元素重复出现。 时间复杂度:O(n),空间复杂度:O(1) python 实现 方法二 # -*- coding:utf-8 -*- class Solution : # 这里要特别注意

Pytorch之线性回归

非 Y 不嫁゛ 提交于 2020-02-14 22:53:18
Pytorch之线性回归 线性回归原理 加载数据 feature = 2 samples = 1000 # 设置参数 true_w = [ 2 , - 3.4 ] true_b = 4.2 # 生成数据 data = t . randn ( samples , feature , dtype = t . float32 ) labels = true_w [ 0 ] * data [ : , 0 ] + true_w [ 1 ] * data [ : , 1 ] + true_b # 数据添加噪声 labels += t . tensor ( np . random . normal ( 0 , 0.01 , size = labels . size ( ) ) , dtype = t . float32 ) def data_iter ( batch_size , features , labels ) : """数据的读取""" num_examples = len ( features ) indices = list ( range ( num_examples ) ) # 打乱数据 random . shuffle ( indices ) for i in range ( 0 , num_examples , batch_size ) : # 取出索引值 j = t .

动手学深度学习之循环神经网络基础

时光毁灭记忆、已成空白 提交于 2020-02-14 22:52:38
循环神经网络 本节介绍循环神经网络,下图展示了如何基于循环神经网络实现语言模型。其目的是基于当前的输入与过去的输入序列,预测序列的下一个字符。循环神经网络引入一个隐藏变量 H H H ,用 H t H_t H t ​ 表示 H H H 在时间步 t t t 的值。 H t H_t H t ​ 的计算基于 X t X_t X t ​ 和 H t − 1 H_{t-1} H t − 1 ​ ,可以认为 H t H_t H t ​ 记录了到当前字符为止的序列信息,利用 H t H_t H t ​ 对序列的下一个字符进行预测。 #### 循环神经网络的构造 假设 X t ∈ R n × d X_t\in R^{n\times d} X t ​ ∈ R n × d 是时间步 t t t 的小批量输入, H t ∈ R n × h H_t\in R^{n\times h} H t ​ ∈ R n × h 是该时间步的隐藏变量,则: H t = ϕ ( X t W x h + H t − 1 W h h + b h ) H_t=\phi(X_tW_{xh}+H_{t-1}W_{hh}+b_h) H t ​ = ϕ ( X t ​ W x h ​ + H t − 1 ​ W h h ​ + b h ​ ) 其中, W x h ∈ R d × h W_{xh}\in R^{d\times h} W

线性回归(Pytorch版)

荒凉一梦 提交于 2020-02-14 22:05:42
# # 线性回归的从零开始实现 # In[6]: get_ipython().run_line_magic('matplotlib', 'inline') import torch from IPython import display from matplotlib import pyplot as plt import numpy as np import random # ## 生成数据集 # In[7]: num_inputs = 2 num_examples = 1000 true_w = [2, -3.4] true_b = 4.2 features = torch.randn(num_examples, num_inputs, dtype=torch.float32) labels = true_w[0] * features[:, 0] + true_w[1] * features[:, 1] + true_b labels += torch.tensor(np.random.normal(0, 0.01, size=labels.size()), dtype=torch.float32) # In[8]: print(features[0], labels[0]) # In[9]: def use_svg_display(): # 用矢量图显示 display

深度学习 #01

不问归期 提交于 2020-02-14 21:38:40
# 线性回归的从零开始实现 In[6]: get_ipython().run_line_magic('matplotlib', 'inline') import torch from IPython import display from matplotlib import pyplot as plt import numpy as np import random ## 生成数据集 In[7]: num_inputs = 2 num_examples = 1000 true_w = [2, -3.4] true_b = 4.2 features = torch.randn(num_examples, num_inputs, dtype=torch.float32) labels = true_w[0] * features[:, 0] + true_w[1] * features[:, 1] + true_b labels += torch.tensor(np.random.normal(0, 0.01, size=labels.size()), dtype=torch.float32) In[8]: print(features[0], labels[0]) In[9]: def use_svg_display(): # 用矢量图显示 display.set