为了进行比赛,这周学习了python有关切片的内容以及pytorch的基本知识。
1.python切片
比如,一个list如下:
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
取前3个元素,应该怎么做?
方法一:
print([L[0], L[1], L[2]])
#运行结果:['Michael', 'Sarah', 'Tracy']
取前N个元素呢?
r = []
n = 3
for i in range(n):
r.append(L[i])
print(r)
#运行结果:['Michael', 'Sarah', 'Tracy']
以上这种方法比较繁琐,对于指定索引范围的操作没有办法,因此python提供了切片(Slice)操作符,能大大简化这种操作。
方法二:
取前3个元素,用一行代码就可以完成切片
print(L[0:3])
#运行结果:['Michael', 'Sarah', 'Tracy']
其中,L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3,如果第一个索引为0,还可以省略。
也可以从索引1开始,取出2个元素:
print(L[1:3])
#运行结果['Sarah', 'Tracy']
且python还支持倒数切片,倒数的第一个元素是-1:
print(L[-2:])
#运行结果:['Bob', 'Jack']
print(L[-2:-1])
#运行结果:['Bob']
前10个数,每两个取一个
print(L[:10:2])
#运行结果:[0, 2, 4, 6, 8]
tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple;字符串也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串。
练习:利用切片操作,实现一个trim()函数,去除字符串首尾的空格
def trim(s):
while (s[:1] == ' '):
s = s[1:]
while (s[-1:] == ' '):
s = s[:-1]
return s
if trim('hello ') != 'hello':
print('default')
elif trim(' hello') != 'hello':
print('default')
elif trim(' hello ') != 'hello':
print('default')
elif trim(' hello world ') != 'hello world':
print('default')
elif trim('') != '':
print('default')
elif trim(' ') != '':
print('default')
else:
print('victory')
2.pytorch入门学习
pytorch:动态计算图
Tensorflow:静态计算图
Pytorch代码通俗易懂,接近python原生代码
什么是pytorch?
是一个基于python的科学计算器,特点:
Pytorch可以做什么?
可以定义模型的architecture,参数的调整(利用训练数据调整参数)。
Pytorch的应用
图像分类、Object Detection、image style transfer、cycleGAN、image captioning、情感分析、question answering、chatbot、预训练语言模型等
2.1 variable变量
要把一个tensor作为神经网络的参数,首先就要变成variable类型,因为variable作为节点可以反向传递,也就是v_out计算后会改变原始variable的值,而tensor不可以:
tensor=torch.FloatTensor([[1,2],[3,4]])
variable=Variable(tensor,requires_grad=True)
print tensor
print variable
t_out=torch.mean(tensor*tensor)
v_out=torch.mean(variable*variable)
v_out.backward()
print(variable.gard)
print(variable.data)
print(variable.data.numpy)
2.2 激励函数(Activation)
y=AF(Wx)
AF()即激励函数,用于解决现实生活中不能用线性方程解决的问题,激励函数必须可微分。
激励函数的类型:relu、signmoid、tanh、softplus
下面是relu函数的实现代码,这里涉及到画图pyplot:
import torch
import torch.nn.funcational as F
from torch.autograd import Variable
import matplotlib.pyplot as plt
x=torch.linspace(-5,5,200)
x=Variable(x)
x_np=x.data.numpy()
y_relu=F.relu(x).data.numpy()
plt.figure(1,figsize=(8,6))
plt.subplot(221)
plt.plot(x_np,y_relu,c='red',lable='relu'
plt.ylim((-1,5))
plt.legend(loc='best')
plt.show()
2.3 关系拟合
编写一个动态拟合点的过程:
import torch
import torch.nn.funcational as F
from torch.autograd import Variable
import matplotlib.pyplot as plt
x=torch.unsqueeze(torch,linspace(-1,1,100),dim=1)#unsqueeze的作用是把数据变2维
y=x.pow(2)+0.2*torch.rand(x.size())
x,y=Variable(x),Variable(y)
plt.scatter(x.data.numpy(),y.data.numpy())
#搭建layer
class Net(torch.nn.Module):#继承Module模块功能
def __init__(self):
super(Net,self).__init__(n_feature,n_hidden,n_output)
self.hidden=torch.nn.Linear(n_feature,n_hidden)#定义hidden层
self.predict=torch.nn.Linear(n_hidden,n_output)#定义预测层
def forward(self,x)#前向传递过程
x=F.relu(self.hidden(x))#使用激励函数,用hidden处理x
x=self.predict(x)
return x
net=Net(1,10,1)
print(net)
#优化参数
optimizer=torch.optim.SGD(net.parameters(),lr=0.5)#lr是学习效率
loss_func=torch.nn.MSELoss()#计算误差,均方差
for t in range(100)
prediction=net(x)
loss=loss_func(prediction,y)#预测值在前,真实值在后
optimizer.zero_grad()#将梯度降为0
loss.backward()#反向传递
optimizer.step()#以学习效率优化梯度
下载了1961——2010黑河流域平均湿度数据、2008年黑河流域气象站观测数据(目的是获得日照数据)、1961——2010黑河流域气温数据、2012年黑河流域太阳辐射数据。
并利用获取的气象站点数据和黑河边界数据制作了气象站点分布图:
根据前人的文献总结出了进行研究的思维导图:
CA模型是我自己感兴趣的问题,我想利用CA模型对土地利用情况进行模拟与预测,初定研究区为山东省,以下是我通过阅读文献所了解到的有关该方向的概述:
土地利用/覆盖变化模型(LUCC)
LUCC数量预测模型:
LUCC空间预测模型:
扩展式CA模型
土地利用空间格局变化分析指标
土地利用影响因素
CA转换规则的获取方法
基于多准则判断(MCE)、基于Logistic回归的方法、基于5个因子的SLEUTH模型方法、基于主成分分析方法、神经网络
IDRISI软件可提供CA-Markov模块
2020.10.30 徐源