pytorch和numpy有很多相似之处,有种似曾相识的感觉,以下纪录pytorch常用的数据操作,并实现kmean,以对pytorch接口有初步熟悉。
torch.from_numpy(ndarray)
将一个numpy数据转成Tensor张量,二者共用内存,意味着修改其中之一,会影响另一个
torch.Tensor(ndarray)
依据ndarray创建一个张量,同以上方法不同的是,二者不共用内存
Tensor 操作
- numpy()
Tensor转换成numpy
- unsqueeze(dim)
类似与numpy.expand_dims, 对张量扩维
d
- repeat(dim1, dim2......)
依旧每一维需要拷贝的次数,对数据进行扩增
>>
- cat([Tensro], dim)
对张量按照dim进行拼接,类似于numpy.concatenate。也就是除了dim,需要合并矩阵的其他维度需要保持一致。
dt
- 类型转换(long, int, bool)
- 数值操作(abs, abs_)
一般数值操作接口,都会对应一个带下划线的相同功能的接口。唯一不同,带下划线的是inplace的,而不带下划线的则返回一个新的张量。
Kmeans简单实现
有以上基础之后,来简单的实现下kmeans算法。
kmean算法很简单
- 随机选择k个样本点作为初始中心点。
- 计算样本到所有k个中心点的距离,距离最近的标记成对应的类别。
- 计算新的中心点,返回步骤二,直到所有样本点标记不再变化。
具体实现如下。
def
随机生成两组数据,作图如下
import
下篇目标,从零实现全连接神经网络。