Learning Diary for Week Eight

Learning Diary for Week Eight

一、 路况预测竞赛学习情况

为了进行比赛,这周学习了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的科学计算器,特点:

  • 类似于NumPy,但是可以使用GPU
  • 可以定义深度学习模型,灵活地进行深度学习的训练和使用

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年黑河流域太阳辐射数据。

并利用获取的气象站点数据和黑河边界数据制作了气象站点分布图:
Learning Diary for Week Eight_第1张图片根据前人的文献总结出了进行研究的思维导图:

Learning Diary for Week Eight_第2张图片

三、CA模型学习进展

CA模型是我自己感兴趣的问题,我想利用CA模型对土地利用情况进行模拟与预测,初定研究区为山东省,以下是我通过阅读文献所了解到的有关该方向的概述:

土地利用/覆盖变化模型(LUCC)

LUCC数量预测模型:

  • 马尔柯夫模型:要求因素的变化特征具有平稳性,因此存在一定局限性
  • 系统动力学模型:缺乏空间因素的处理能力
  • 灰色预测模型:不能综合考虑多个因素的影响,使得应用偏短期预测 回归分析模型:主观地确定其结构和参数,成效不明显
  • 人工神经网络模型:对于确定模型参数及结构较简便易行,消除了常规模拟方法带来的弊端

LUCC空间预测模型:

  • 元胞自动机:可模拟系统的动态过程,也能预测系统的长期趋势 CENTURY模型:要求输入有效且有代表性的参数才能获得较好的结果
  • CLUS-S模型:侧重于模拟土地利用变化的空间分布格局变化之前需要用其他数理方法获取数量变化情况
  • GEOMO模型:侧重于预测“已开发土地”与“未开发土地”之间的变化 IMAGE模型:尝试构造全球变化模型的框架

扩展式CA模型

  • CA—Markov:综合了CA模拟空间动态变化的能力和Markov长期预测的优点,把土地利用各地类之间的转移概率当做恒定值来处理
  • Logistic—CA:通过改变CA的转换规则,进而CA可以有效模拟土地利用动态变化
  • Logistic—CA—Markov:CA—Markov把土地利用各地类之间的转移概率当做恒定值来处理,没有考虑到自然和社会经济的非线性驱动因素,加入能够有效综合非线性驱动因素的Logistic定量分析方法,进而改变CA转换规则进行模拟。

土地利用空间格局变化分析指标

  • 转移矩阵
  • 土地利用程度
  • 空间中心迁移模型

土地利用影响因素

  • 自然:DEM、坡度
  • 社会经济:人口、GDP
  • 可达性因子:公路、铁路、城镇、水系

CA转换规则的获取方法
基于多准则判断(MCE)、基于Logistic回归的方法、基于5个因子的SLEUTH模型方法、基于主成分分析方法、神经网络

IDRISI软件可提供CA-Markov模块

2020.10.30 徐源

你可能感兴趣的:(笔记)