“人造太阳”计划

pycaffe生成solver文件并运行

谁说我不能喝 提交于 2020-01-03 11:08:38
使用pycaffe生成solver文件 # 如何利用pycaffe 生成 solver 文件 from caffe.proto import caffe_pb2 s = caffe_pb2.SolverParameter() # 封装了 solver文件的类 # 定义solver文件的参数 s.train_net = "train.prototxt" # 要训练的网络 s.test_net.append('test.prototxt') # 定义测试网络 s.test_interval = 100 # 训练多长时间测试一次 s.test_iter.append(10) # 测试迭代数, # 例如:有10000个测试样本,batch_size设为32, # 那么就需要迭代 10000/32=313次才完整地测试完一次,所以设置test_iter为313。 s.max_iter = 1000 # 最大迭代次数 s.base_lr = 0.1 # 基础学习率 s.weight_decay = 5e-4 # 定义学习率 衰减率 s.lr_policy = 'step' # 定义学习率更新的方式 s.display = 10 # 定义打印网络的间隔 s.snapshot = 10 # 定义 caffemodel 存储的间隔 s.snapshot_prefix = 'model' #

pytorch :: Dataloader中的迭代器和生成器应用

拈花ヽ惹草 提交于 2020-01-03 10:38:29
在使用pytorch训练模型,经常需要加载大量图片数据,因此pytorch提供了好用的数据加载工具Dataloader。 为了实现小批量循环读取大型数据集,在Dataloader类具体实现中,使用了迭代器和生成器。 这一应用场景正是python中迭代器模式的意义所在,因此本文对Dataloader中代码进行解读,可以更好的理解python中迭代器和生成器的概念。 本文的内容主要有: 解释python中的迭代器和生成器概念 解读pytorch中Dataloader代码,如何使用迭代器和生成器实现数据加载 python迭代基础 python中围绕着迭代有以下概念: 可迭代对象 iterables 迭代器 iterator 生成器 generator 这三个概念互相关联,并非孤立。在可迭代对象的基础上发展了迭代器,在迭代器的基础上又发展了生成器。 学习这些概念的名词解释没有多大意义。编程中很多的抽象概念都是为了更好的实现某些功能,才去人为创造的协议和模式。 因此,要理解它们,需要探究概念背后的逻辑,为什么这样设计?要解决的真正问题是什么?在哪些场景下应用是最好的? 迭代模式首先要解决的基础问题是,需要按一定顺序获取集合内部数据,比如循环某个list。 当数据很小时,不会有问题。但当读取大量数据时,一次性读取会超出内存限制,因此想出以下方法: 把大的数据分成几个小块,分批处理

Python—迭代对象、迭代器、生成器

守給你的承諾、 提交于 2020-01-01 16:03:15
原文转载自 liuzhijun , 原文地址: https://foofish.net/iterators-vs-generators.html 本文源自 RQ 作者的一篇博文,原文是 Iterables vs. Iterators vs. Generators ,俺写的这篇文章是按照自己的理解做的参考翻译,算不上是原文的中译版本,推荐阅读原文,谢谢网友指正。 在了解Python的数据结构时,容器(container)、可迭代对象(iterable)、迭代器(iterator)、生成器(generator)、列表/集合/字典推导式(list,set,dict comprehension)众多概念参杂在一起,难免让初学者一头雾水,我将用一篇文章试图将这些概念以及它们之间的关系捋清楚。 容器(container) 容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用 in , not in 关键字判断元素是否包含在容器中。通常这类数据结构把所有的元素存储在内存中(也有一些特例,并不是所有的元素都放在内存,比如迭代器和生成器对象)在Python中,常见的容器对象有: list, deque, .... set, frozensets, .... dict, defaultdict, OrderedDict, Counter, .... tuple,

栈 队列 优先队列 STL

余生颓废 提交于 2020-01-01 14:36:00
栈 #include<stack> //头文件 stack<char> st; //定义 st.push(str1[0]); //入栈 cur=st.top (); //取栈顶值 st.pop(); //出栈 st.empty ()//空为true 队列 #include<queue> queue<char>que; que.push(a); a=que.front(); que.pop(); que.empty ()优先队列 bool operator < (const coor &a, const coor &b) { return a.time > b.time; //从小到大排序,修改为最小堆,取最小值。 } priority_queue<coor>que; que.push(a); a=que.top();// 默认为最大堆,取最大值。 que.pop(); que.empty () 以下对vector、list、deque容器通用,这里以list容器为例,注意访问元素时vector、deque可用下标直接访问,但对list不行 list<line> dlist; vector<int> c; line in; list<line>::iterator iter;//定义一个指向元素的迭代器 插入: dlist.insert(iter,t)/

STL之set&multiset使用简介

风格不统一 提交于 2019-12-30 04:16:45
关于set,必须说明的是set关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。应该注意的是set中数元素的值不能直接被改变。C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构。 为何每次insert之后,以前保存的iterator不会失效? iterator这里就相当于指向节点的指针,内存没有变,指向内存的指针怎么会失效呢(当然被删除的那个元素本身已经失效了)。相对于vector来说,每一次删除和插入,指针都有可能失效,调用push_back在尾部插入也是如此。因为为了保证内部数据的连续存放,iterator指向的那块内存在删除和插入过程中可能已经被其他内存覆盖或者内存已经被释放了。即使时push_back的时候,容器内部空间可能不够,需要一块新的更大的内存,只有把以前的内存释放,申请新的更大的内存,复制已有的数据元素到新的内存,最后把需要插入的元素放到最后,那么以前的内存指针自然就不可用了。特别时在和find等算法在一起使用的时候,牢记这个原则:

【STL__set_的应用】

爱⌒轻易说出口 提交于 2019-12-30 04:13:48
1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器, 更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表, map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯, 以成员函数方式提供的常用操作,如:插入、排序、删除、查找等。让用户在STL使用过程中,并不会感到陌生。 关于set,必须说明的是set关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型, 并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。 应该注意的是set中数元素的值不能直接被改变。C++ STL中标准关联容器set, multiset, map, multimap内部 采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。RB树的统计性能要好 于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构。 2.set中常用的方法 begin()    ,返回set容器的第一个元素 end()      ,返回set容器的最后一个元素 clear()    ,删除set容器中的所有的元素 empty()    ,判断set容器是否为空 max

【块状链表】AutSky_JadeK的块状链表模板+总结(STL版)

这一生的挚爱 提交于 2019-12-30 03:03:20
Part 1、块状链表。 定位 插入 删除 数组 O(1) O(n) O(n) 链表 O(n) O(1) O(1) 对于线性表的以上常见操作来说,数组和链表都无法有效地解决。但是,若我们将链表的每个节点存成一个数组,使得链表里每个节点的数据拼接起来就是原先的线性表中的内容(即块状链表),并且数组的大小合适的话,以上的操作都能比较好地解决了。根据均值不等式,若每个块的大小定为sqrt(n)左右最优,此时块数也是sqrt(n)左右,易证。以下是块状链表的基础操作的思想、复杂度和代码。 一、声明。C++ STL中提供了list和vector两种数据结构,于是,若我们将它们嵌套起来,便是一个很方便的块状链表,免去指针之类的操作。这里的每个块仅仅存储了数据,没有存储额外的域,实际情况要予以添加。 next函数用于返回list的迭代器x的下一个迭代器。 1 #include<cstdio> 2 #include<vector> 3 #include<list> 4 using namespace std; 5 int sz;//块大小,一般为sqrt(n) 6 struct BLOCK{vector<int>data;BLOCK(){}}; 7 list<BLOCK>List; 8 typedef list<BLOCK>::iterator L_ITER; 9 typedef vector

博客作业05--查找

孤人 提交于 2019-12-30 00:53:54
1.学习总结 1.1查找的思维导图 1.2 查找学习体会 map的基本操作函数: C++ Maps是一种关联式容器,包含“关键字/值”对 begin() 返回指向map头部的迭代器 clear() 删除所有元素 count() 返回指定元素出现的次数 empty() 如果map为空则返回true end() 返回指向map末尾的迭代器 equal_range() 返回特殊条目的迭代器对 erase() 删除一个元素 find() 查找一个元素 get_allocator() 返回map的配置器 insert() 插入元素 key_comp() 返回比较元素key的函数 lower_bound() 返回键值>=给定元素的第一个位置 max_size() 返回可以容纳的最大元素个数 rbegin() 返回一个指向map尾部的逆向迭代器 rend() 返回一个指向map头部的逆向迭代器 size() 返回map中元素的个数 swap() 交换两个map upper_bound() 返回键值>给定元素的第一个位置 value_comp() 返回比较元素value的函数 c++ map容器应用实例 #include <map> #include <string> #include <iostream> using namespace std; void map_insert(map <

python之路——迭代器与生成器

落花浮王杯 提交于 2019-12-29 17:59:18
要了解for循环是怎么回事儿,咱们还是要从代码的角度出发。 首先,我们对一个列表进行for循环。 for i in [1,2,3,4]: print(i) 上面这段代码肯定是没有问题的,但是我们换一种情况,来循环一个数字1234试试 for i in 1234 print(i) 结果: Traceback (most recent call last): File "test.py", line 4, in <module> for i in 1234: TypeError: 'int' object is not iterable iterable:是可迭代的意思。 首先,我们从报错来分析,好像之所以1234不可以for循环,是因为它不可迭代。那么如果“可迭代”,就应该可以被for循环了。 这个我们知道呀, 字符串、列表、元组、字典、集合 都可以被for循环,说明他们 都是可迭代的 。 我们怎么来证明这一点呢? from collections import Iterable l = [1,2,3,4] t = (1,2,3,4) d = {1:2,3:4} s = {1,2,3,4} print(isinstance(l,Iterable)) print(isinstance(t,Iterable)) print(isinstance(d,Iterable)) print

迭代器/生成器

≡放荡痞女 提交于 2019-12-28 01:18:45
迭代器 #1.什么是迭代器 迭代取值的工具 #2.为什么用迭代器 优点: 1、提供一种不依赖索引的取值方式 2、更节省内存(自定义迭代器是,它所占的内存是功能本身的代码量,) 缺点: 1、没有按索引取值灵活 2、迭代器对象是一次性的,值可以取完,再想取值重新把可迭代对象定义为迭代器对象        #3. 如何用迭代器   可迭代的对象:  str\list\tuple\dict\set\文件对象 但凡内置有__iter__方法的对象都称之为可迭代对象    可迭代对象).__iter__=====》》迭代器对象   迭代器对象:   文件对象     既内置有__iter__方法又内置有__next__方法的对象都称之为迭代器对象   __iter__与__next__简便写法 k={'a':111,'b':222,'c':333} iter_k=iter(k) # k.__iter__() print(next(iter(k))) #iter_d.__next__()    4.for循环的底层工作原理(必须是可迭代类型)    1  把可迭代对象转换为迭代器对象,    2  调迭代器的__next__方法,取值,取值    3  用try和except监测异常,在把迭代器中值取完的情况下结束循环 方式一方式二是一个引子 方式一 k={'a':111,'b':222,'c'