程序相关的一些笔记

一、X[:,0]是numpy中数组的一种写法。表示对一个二维数组,取该二维数组第一维中的所有数据,第二维中取第零个数据,X[:,0]就是取所有行的第零个数据。

import numpy as np
X = np.array([[0,1],[2,3],[4,5],[6,7],[8,9],[10,11],[12,13],[14,15],[16,17],[18,19]]) 
print (X[:,0])

输出结果为

[ 0  2  4  6  8 10 12 14 16 18]

 X[:,1]就是取所有行的第1个数据

import numpy as np
X = np.array([[0,1],[2,3],[4,5],[6,7],[8,9],[10,11],[12,13],[14,15],[16,17],[18,19]]) 
print (X[:,1])

 输出结果为

[ 1  3  5  7  9 11 13 15 17 19]

 X{n,:]是取第一维中下标为n的元素的所有值

import numpy as np
X = np.array([[0,1],[2,3],[4,5],[6,7],[8,9],[10,11],[12,13],[14,15],[16,17],[18,19]]) 
print (X[2,:])

输出结果为 

[4 5]

X[:,m:n]表示取所有数据的第m到n-1列数据,含左不含右,例如,X[:,1:3]表示输出X中所有行第一到第二列数据

X = np.array([[0,1,2],[3,4,5],[6,7,8],[9,10,11],[12,13,14],[15,16,17],[18,19,20]])  
print (X[:,1:3]) 

 结果为

[[ 1  2]
 [ 4  5]
 [ 7  8]
 [10 11]
 [13 14]
 [16 17]
 [19 20]]
self.sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True,
                                                     log_device_placement=True))

二、config用来对session进行参数配置,log_device_placement=true:是否打印设备分配日志,allow_soft_placement=true:如果你指定的设备不存在,允许tf自动分配设备。

三、tf.placeholder(dtype,shape=none,name=none),

参数:

dtype:数据类型,常用的是tf.float32,tf.float64等数值类型

shape:数据形状,默认是None,就是一维值,也可以是多维(比如[2,3],[None,3]表示列是3,行不定)

name:名称

四、Tensorflow的设计理念称之为计算流图,在编写程序时,首先构筑整个系统的graph,代码并不会直接生效,这一点和python的其他数值计算库(如Numpy等)不同,graph为静态的,类似于docker中的镜像。然后,在实际的运行时,启动一个session,程序才会真正的运行。这样做的好处就是:避免反复地切换底层程序实际运行的上下文,tensorflow帮你优化整个系统的代码。我们知道,很多python程序的底层为C语言或者其他语言,执行一行脚本,就要切换一次,是有成本的,tensorflow通过计算流图的方式,帮你优化整个session需要执行的代码,还是很有优势的。所以placeholder()函数是在神经网络构建graph的时候在模型中的占位,此时并没有把要输入的数据传入模型,它只会分配必要的内存。等建立session,在会话中,运行模型的时候通过feed_dict()函数向占位符喂入数据。

五、shape函数:对于二维张量,shape[0]表示行数,shape[1]表示列数,同理,三维张量还有shape[2],一般来说,-1代表最后一个,所以shape[-1]表示列数,注意,即使是一维行向量,shape[-1]表示行向量的元素总数,换言之也是列数。

六、For I in range(1,len(layers)-1):初始化一个神经网络的权重,layers是一个列表,表示神经网络的层数,表示从1开始遍历网络到倒数第二层,

七、tf.zeros(shape,dtype=tf.float32,name=None),shape表示形状。也就是一维的还是n维的数组,下面看图说话,一维数组放一个值

import tensorflow as tf
res = tf.random_uniform((4, 4), -1, 1)
res2 = tf.zeros([1])
with tf.Session() as sess:
    print(sess.run(res2))

输出结果为

[0.]

一维数组放两个值

import tensorflow as tf
res = tf.random_uniform((4, 4), -1, 1)
res2 = tf.zeros([2])
with tf.Session() as sess:
    print(sess.run(res2))

输出结果为

[0. 0.]

二维数组

import tensorflow as tf
res = tf.random_uniform((4, 4), -1, 1)
res2 = tf.zeros([2, 4])
with tf.Session() as sess:
    print(sess.run(res2))

结果为

[[0. 0. 0. 0.]
 [0. 0. 0. 0.]]

八、tf.concat用来拼接张量,tf.concat([tensor1,tensor2,......],axis)

import tensorflow as tf
t1 = [[1,2,3],[4,5,6]]
t2 = [[7,8,9],[10,11,12]]
tf.concat([t1,t2],0)
tf.concat([t1,t1],1)

输出结果

[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
[[1,2,3,4,5,6],[7,8,9,10,11,12]]

九、np.linalg.norm用于求范数,linalg本意为linear(线性)+algebra(代数),norm则表示范数。

用法:np.linalg.norm(x,ord=None,axis=None,keepdims=False)

x表示矩阵,一维数组也是可以的;ord表示范数类型,当x是矩阵时,ord=1表示求列和的最大值;ord=2,求特征值,然后求最大特征值的算术平方根;ord=无穷,表示求行和的最大值;ord=None表示求整体的矩阵元素平方和再开方;axis:参数等于0时,表示按列向量来进行处理,求多个列向量的范数;参数等于1时,表示按行向量来进行处理,求多个行向量的范数;参数为None时表示整个矩阵的范数;keepdims:表示是否保持矩阵的二维特性,True表示保持,False表示不保持,默认为False

十、torch.autograd.grad(outputs, inputs, grad_outputs=None, retain_graph=None, create_graph=False, only_inputs=True, allow_unused=False, is_grads_batched=False)

outputs:求导的因变量(需要求导的函数)。
inputs:求导的自变量。
grad_outputs:如果outputs为标量,则grad_outputs=None,也就是说,可以不用写; 如果outputs 是向量,则此参数必须写。
retain_graph: True 保留计算图, False释放计算图。
create_graph:若要计算高阶导数,则必须选为True。
allow_unused:允许输入变量不进入计算。

1、output为标量:不需要设置grad_outputs,即grad_outputs=None

2、output为向量:求解梯度时,需要将grad_outputs设置为全一的与output形状相同的张量

grad_outputs=torch.ones_like(y)

3、求二阶导数:需要设置create_graph=True才能计算二阶导数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值