1.1 自动求导函数:
GradientTape(persistent=False, watch_accessed_variables=True)
persistent: 布尔值,用来指定新创建的gradient tape是否是可持续性的。默认是False,意味着只能够调用一次GradientTape()函数。
watch_accessed_variables: 布尔值,表明GradientTape()函数是否会自动追踪任何能被训练的变量。默认是True。要是为False的话,意味着你需要手动去指定你想追踪的那些变量。
1.2 监视非Variable变量
tape.watch(tensor) tape.watch()用于跟踪指定的tensor变量。由于GradientTape()默认只对tf.Variable类型的变量进行监控。
2 tensor=tf.constant([1, 2], dtype=tf.float32)
为查看结果必须创建一个会话,并用取值函数eval()来查看创建的tensor的值:
sess=tf.Session() with sess.as_default(): print('结果是:', tensor.eval()) 1 2 3 结果是:1 1 而如果value是一个列表: tensor=tf.constant([1, 2]) sess=tf.Session() with sess.as_default(): print('结果是:', tensor.eval()) 1 2 3 4
结果是:[1 2]
1
后面四个参数可写可不写,第二个参数表示数据类型,一般可以是tf.float32, tf.float64等:
tensor=tf.constant([1, 2], dtype=tf.float32) sess=tf.Session() with sess.as_default(): print('结果是:', tensor.eval()) 1 2 3 4
结果是: [1. 2.]
1
注意到数据类型相比之前发生了改变,因为这次我们指定了数据类型为float32,所以不是1 2,而是1. 2.。
第三个参数表示张量的“形状”,即维数以及每一维的大小。如果指定了第三个参数,当第一个参数value是数字时,张量的所有元素都会用该数字填充:
tensor=tf.constant(-1, shape=[2, 3]) sess=tf.Session() with sess.as_default(): print('结果是:', tensor.eval()) 1 2 3 4 结果是: [[-1 -1 -1] [-1 -1 -1]]
3np.meshgrid(x,y)
比如x有4个元素,y有3个元素,故生成的矩阵为3行4列的矩阵,形状固定,矩阵z,s的元素对应x,y本身元素的复制,但x作为z的行向量,y作为s的列向量。