“人造太阳”计划

迭代器,三元表达式,列表推存式,字典生成式,生成器生成式,生成器,递归

随声附和 提交于 2020-02-23 01:46:11
1. 迭代器 迭代器:他不是函数,只是一个称呼。 python中一切皆是对象(数据类型) 可迭代对象:含有 .__ iter __方法的数据类型就叫做可迭代对象。 除了数字类型,所有数据类型都是可迭代对象。可迭代的对象:Python内置str、list、tuple、dict、set、file都是可迭代对象。 特点: 内置有 __iter__ 方法的都叫可迭代的对象。 x = 10 #则不是可迭代对象 可迭代对象位 .__iter__ s = "adc" s.__iter__() lt = [1,2,3] lt.__iter__() tup = (1,) tup.__iter__() se = {1} se.__iter__() dic ={"a":1} dic.__iter__() fw = open("text","a+",encoding="utf-8") fw.seek(0,0) fw.__iter__() # 除了数字类型,所有数据类型都是可迭代对象 迭代器对象 迭代器对象:含有 .__ iter __ 和 .__ next __方法的对象就是迭代器对象。 概念:可迭代的对象执行 __iter__ 方法得到的返回值。并且可迭代对象会有一个 __next__ 方法。 只有字符串和列表都是依赖索引取值的,而其他的可迭代对象都是无法依赖索引取值的

STL List

冷暖自知 提交于 2020-02-21 10:10:01
View Code 1 #include <iostream> 2 #include<list> 3 4 using namespace std; 5 6 void PrintListContent(const list<int>& listInput); 7 8 int main() 9 {10 11 12 13 list<int> a;14 list<int> b;15 list<int>::iterator iter;16 17 b.push_back(100);18 b.push_back(200);19 b.push_back(300);20 b.push_back(400);21 b.push_back(500);22 23 24 PrintListContent(b);25 26 cout<< endl;27 28 a.push_front(4);29 a.push_front(3);30 a.push_front(2);31 a.push_front(1);32 33 a.push_back(5);34 35 36 37 iter = a.begin();38 ++iter;39 40 41 a.insert(iter,10);//开头的前面插入了1042 ++iter;43 44 a.insert(iter,4,20);//在后端插入4个2045 46 a

task03过拟合、欠拟合

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-20 08:53:20
过拟合、欠拟合及其解决方案 过拟合、欠拟合的概念 权重衰减 丢弃法 模型选择、过拟合和欠拟合 训练误差和泛化误差 在解释上述现象之前,我们需要区分训练误差(training error)和泛化误差(generalization error)。通俗来讲,前者指模型在训练数据集上表现出的误差,后者指模型在任意一个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似。计算训练误差和泛化误差可以使用之前介绍过的损失函数,例如线性回归用到的平方损失函数和softmax回归用到的交叉熵损失函数。 机器学习模型应关注降低泛化误差。 模型选择 验证数据集 从严格意义上讲,测试集只能在所有超参数和模型参数选定后使用一次。不可以使用测试数据选择模型,如调参。由于无法从训练误差估计泛化误差,因此也不应只依赖训练数据选择模型。鉴于此,我们可以预留一部分在训练数据集和测试数据集以外的数据来进行模型选择。这部分数据被称为验证数据集,简称验证集(validation set)。例如,我们可以从给定的训练集中随机选取一小部分作为验证集,而将剩余部分作为真正的训练集。 K折交叉验证 由于验证数据集不参与模型训练,当训练数据不够用时,预留大量的验证数据显得太奢侈。一种改善的方法是K折交叉验证(K-fold cross-validation)。在K折交叉验证中

中文文本分类

好久不见. 提交于 2020-02-20 06:20:16
目录 代码分解 utils train_eval models.TextCNN main 在GPU下的运行结果 代码分解 代码包括四个部分,分别是: 工具类:utils 训练及测试代码:train_eval 模型:models.TextCNN 主函数:main 在notebook中依次运行前三个部分,最后执行main就可以开始训练了 colab链接: https://colab.research.google.com/drive/1vUnHAjmA3OTt5o47HQkQLCXA8-rtsZEs 具体代码及解析如下: utils """ utils """ import os import torch import numpy as np import pickle as pkl from tqdm import tqdm import time from datetime import timedelta MAX_VOCAB_SIZE = 10000 # 词表长度限制 UNK, PAD = '<UNK>', '<PAD>' # 未知字,padding符号 def build_vocab(file_path, tokenizer, max_size, min_freq): """ 构建一个词表: 首先对数据集中的每一行句子按字/空格进行分割,然后统计所有元素的出现频率

5.5 卷积神经网络(LeNet)

♀尐吖头ヾ 提交于 2020-02-20 03:10:19
在“多层感知机的从零开始实现”一节里我们构造了一个含单隐藏层的多层感知机模型来对Fashion-MNIST数据集中的图像进行分类。每张图像高和宽均是28像素。我们将图像中的像素逐行展开,得到长度为784的向量,并输入进全连接层中。然而,这种分类方法有一定的 局限性。 图像在同一列邻近的像素在这个向量中可能相距较远。它们构成的模式可能难以被模型识别。 对于大尺寸的输入图像,使用全连接层容易导致模型过大。假设输入是高和宽均为 1 , 000 1,000 1 , 0 0 0 像素的彩色照片(含3个通道)。即使全连接层输出个数仍是256,该层权重参数的形状也是 3 , 000 , 000 × 256 3,000,000\times 256 3 , 0 0 0 , 0 0 0 × 2 5 6 :它占用了大约3 GB的内存或显存。这会带来过于复杂的模型和过高的存储开销。 卷积层尝试解决这两个问题。 卷积层保留输入形状,使图像的像素在高和宽两个方向上的相关性均可能被有效识别; 卷积层通过滑动窗口将同一卷积核与不同位置的输入重复计算,从而避免参数尺寸过大。 卷积神经网络就是含卷积层的网络。本节里我们将介绍一个早期用来识别手写数字图像的卷积神经网络:LeNet。这个名字来源于LeNet(1994)论文的第一作者Yann LeCun

C++ Primer(第五版)读书笔记 & 习题解答 --- Chapter 3

戏子无情 提交于 2020-02-19 01:05:09
Chapter 3.1 1. using声明具有如下的形式: using namespace::name; Chapter 3.2 1. C++标准一方面对库类型所提供的操作做了规定,另一方面也对库的实现做出了性能上的要求,所以,在一般的应用场合,标准库类型都有足够的效率。 2. 当用一个字符串字面值初始化string对象时,除了最后那个空字符外其他所有的字符都会被拷贝到新创建的string对象中去。 3. 如果使用等号初始化一个变量,实际上执行的是拷贝初始化。如果不使用等号,则执行的是直接初始化: string s1 = "hi, ya"; // 拷贝初始化 string s2(10, 'c'); // 直接初始化 4. 在执行读取string的操作时,string对象会自动忽略开头的空白(即空格符、换行符、制表符等)并从第一个真正的字符开始读起,直到遇见下一处空白为止: // 如果我们输入" Hello World! ",输出将是"Hello",没有任何空格 string s; cin >> s; cout << s << endl; 5. string::size_type是一个无符号类型的值,而且能足够存放下任何string对象的大小。需要注意的是,string类的size函数的返回值类型是string::size_type,由于它是一个无符号类型的值

Pytorch 实现 LeNet

扶醉桌前 提交于 2020-02-19 00:15:58
#import import sys import d2lzh_pytorch as d2l import torch import torch.nn as nn import torch.optim as optim import time #net class Flatten(torch.nn.Module): #展平操作 def forward(self, x): return x.view(x.shape[0], -1) class Reshape(torch.nn.Module): #将图像大小重定型 def forward(self, x): return x.view(-1,1,28,28) #(B x C x H x W) net = torch.nn.Sequential( #Lelet Reshape(), nn.Conv2d(in_channels=1, out_channels=6, kernel_size=5, padding=2), #b*1*28*28 =>b*6*28*28 nn.Sigmoid(), nn.AvgPool2d(kernel_size=2, stride=2), #b*6*28*28 =>b*6*14*14 nn.Conv2d(in_channels=6, out_channels=16, kernel_size=5), #b*6

动手学深度学习之lenet

妖精的绣舞 提交于 2020-02-18 16:33:39
参考伯禹学习平台《动手学深度学习》课程内容内容撰写的学习笔记 原文链接:https://www.boyuai.com/elites/course/cZu18YmweLv10OeV/lesson/cuwTT4MTwpHpKfaKKDcYQt 感谢伯禹平台,Datawhale,和鲸,AWS给我们提供的免费学习机会!! 总的学习感受:伯禹的课程做的很好,课程非常系统,每个较高级别的课程都会有需要掌握的前续基础知识的介绍,因此很适合本人这种基础较差的同学学习,建议基础较差的同学可以关注伯禹的其他课程: 数学基础:https://www.boyuai.com/elites/course/D91JM0bv72Zop1D3 机器学习基础:https://www.boyuai.com/elites/course/5ICEBwpbHVwwnK3C course content lenet 模型介绍 lenet 网络搭建 运用lenet进行图像识别-fashion-mnist数据集 Convolutional Neural Networks 使用全连接层的局限性:(数据集中图像大小28*28,展开成一个764) 图像在同一列邻近的像素在这个向量中可能相距较远。它们构成的模式可能难以被模型识别。 对于大尺寸的输入图像,使用全连接层容易导致模型过大。 使用卷积层的优势: 卷积层保留输入形状。

TensorboardX----linux服务器远程训练,Windows本地查看日志

筅森魡賤 提交于 2020-02-18 14:30:46
使用pytorch训练大型数据集是常常需要通过loss的下降曲线或者acc准确率的上升情况直观上判断模型的设计是否合理,使用tensorboardX将迭代的loss和acc加入scale中,方便查看中间过程,及时调整模型。 安装: pip install tensorflow pip install tensorboardX 定义: import numpy as np from tensorboardX import SummaryWriter writer = SummaryWriter() 添加scale: for n_iter in range(100): writer.add_scalars('data/scalar_group', {'xsinx': n_iter * np.sin(n_iter), 'xcosx': n_iter * np.cos(n_iter), 'arctanx': np.arctan(n_iter)}, n_iter) writer.close() 添加graph: resnet18 = models.resnet18(False) dumpty_input = torch.randn(1, 3, 224, 224) writer.add_graph(resnet18, (dummy_input,)) demo代码: # demo.py

[STL][C++]MAP

余生长醉 提交于 2020-02-17 11:31:23
参考链接:http://blog.sina.com.cn/s/blog_61533c9b0100fa7w.html map头文件 #include <map> map添加数据; map<int ,string> maplive; 1.maplive.insert( pair<int,string> (102,"aclive")); 2.maplive.insert( map<int,string>::value_type (321,"hai")); 3, maplive[112]="April";//map中最简单最常用的插入添加! map中元素的查找: find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。 map<int ,string >::iterator l_it;; l_it=maplive.find(112); if(l_it==maplive.end()) cout<<"we do not find 112"<<endl; else cout<<"wo find 112"<<endl; map中元素的删除: 如果删除112; map<int ,string >::iterator l_it;; l_it=maplive.find(112); if(l_it==maplive.end()) cout<<"we do not