import torch import numpy as np ''' https://github.com/cmudeeplearning11785/Spring2019_Tutorials/blob/master/recitation-0/Numpy%20%26%20PyTorch.ipynb http://deeplearning.cs.cmu.edu/ recitation 0 ''' ''' 1.训练神经网络中可能会用到的数据格式 Python objects - pkl pkl用来保存字典类型的数据,神经网络模型中的weights权值就是字典,在训练过程中可以保存到 .pkl文件中,以防止程序突然终止时,断点处的模型参数被保存下来 Numeric data - npz Multi-data - csv 读取表格文件 Plain text - txt Large Datasets - HDF5 ''' import pickle obj = { 'age':23,'hobbies':['photography','running','travelling'] } pickle.dump(obj,open('dict.pkl','wb'))#将字典写入当前运行目录下的dict.pkl文件中 obj2=pickle.load(open('dict.pkl','rb')) print(obj2)#{'age': 23, 'hobbies': ['photography', 'running', 'travelling']} import csv import pprint with open('F:\\2\\2.csv','r') as csvfile: reader=csv.reader(csvfile,delimiter=',') for row in reader: print(row) ''' ['1', '20', 'chen'] ['2', '30', 'li'] 将当前的csv文件读取成列表格式,列表中的每个元素表示将当前行中所有元素(用逗号分隔开) ''' ''' 2.训练神经网络所需要的数据在内存中是什么形式 data containers数据容器 lists - generic container , numeric indexing tuples - immutable lists dictionaries - key-value organisation sets - collection of unique elements 使用torch.utils.data.dataloaders加载得到的batch size训练数据是一个tuple类型 tuple中的每个元素是一个torch.tensor 所有torch.tensor的shape[0]都等于batch size 这一点对于神经网络是CNN的情况,会输入 [batch size,channel_num,H,W]的彩色图像 而如果需要将一个batch size的数据送入RNN/LSTM,则需要注意RNN所要求的数据的输入在 第1个dimension上 ''' ''' 小结:python中对于列表的操作 在训练深度学习模型的预处理过程中经常会用到 ''' homo_list = [12,45,900,78,34,66,17,85] #(1)list的复制和扩充 l1=homo_list*2 #表示将原始列表复制一遍,再将复制之后的列表append到原始列表的后面 #这个操作后列表的长度将会变成之前的2倍,而并不是像所想象的那样:列表中的所有元素数值变成之前的2倍 #对于numpy中的数组进行这样的*2操作则是将数组中的每个元素数值乘2 #(2)两个list相加 hetero_list = [10,'foo',1.3] l2=homo_list+hetero_list #将后面一个列表中的元素append到前面的列表中, print(l1) print(l2) ''' [12, 45, 900, 78, 34, 66, 17, 85, 12, 45, 900, 78, 34, 66, 17, 85] [12, 45, 900, 78, 34, 66, 17, 85, 10, 'foo', 1.3] ''' #(3)sorted, sum,max,min operator(list) #(4)list切片 sliced_list = [ start_idx : end_idx+1 : step] ''' start_idx 所希望取出的元素下标 end_idx 所希望取出的元素下标(边界) 注意:右边边界(end_idx+1)不可达 step 步长 ''' print(homo_list) print(homo_list[:5])#取出索引下标 0 1 2 3 4 共5个元素 print(homo_list[-1:0:-2])#-1表示列表中最后一个元素的下标,从后向前取,则下下标步长为负数 ''' [12, 45, 900, 78, 34, 66, 17, 85] [12, 45, 900, 78, 34] [85, 66, 78, 45] ''' #(5)将列表中满足某个条件的所有元素取出 ''' *result* = [*transform* *iteration* *filter* ] transform:对于所取出的满足条件的每个元素所进行的操作,,最后再构成新的列表 新列表的长度为原列表中满足某个条件的元素总数 iteration:对列表中的每个元素进行遍历 filter:过滤出从原列表中取出的某个元素是否满足条件 res = [ manipulation(instance[2]) for instance in sorted_dataset ] manipulation可以理解为对于数据进行的某种操作 ''' res=[no for no in homo_list if no>50] print(res)#[900, 78, 66, 85] import time start1=time.time() out1=[i for i in range(100000)] end1=time.time() out2=[] for i in range(100000): out2.append(i) end2=time.time() print('time1 with list comprehension',end1-start1,'time2 for general loop',end2-end1) #time1 with list comprehension 0.006974697113037109 time2 for general loop 0.015011310577392578 #使用list comprehension机制比一般的for循环速度快很多(尤其是所需要处理的数据量较大时) import pdb def pairwise_generator(input_data): pdb.set_trace() for i in range(0, len(input_data), 2): yield (input_data[i], input_data[i + 1]) data = [1, 'one', 2, 'two', 3, 'three', 4, 'four'] generator = pairwise_generator(data) for elt in generator: print(elt)
CMU 11-785 recitation python中的list类型操作
最新推荐文章于 2022-11-04 15:23:17 发布