一个基础但完整神经网络代码
一、张量生成
1.普通张量生成constant
创建张量:张量是TensorFlow里最常用的数据结构,可以理解为任意维的数组。
调用方式为:
tf.constant(张量内容, dtype=数据类型(可选))
如创建一个一阶张量(即一维数组),里面只有两个元素1和5:
a = tf.constant([1, 5], dtype=tf.int64)
print("a:", a)
print("a.dtype:", a.dtype)
print("a.shape:", a.shape)
输出结果(可以看看TensorFlow数据类型的输出方式,其中shape为张量的大小,如shape(1,2),代表1*2的张量,或者说1行2列的数组):
a: tf.Tensor([1 5], shape=(2,), dtype=int64)
a.dtype: <dtype: 'int64'>
a.shape: (2,)
2.转化张量生成convert_to_tensor
将numpy数据类型转化成TensorFlow数据类型:
tf.convert_to_tensor(数据名, dtype=数据类型(可选))
如将numpy类型的a转化为TensorFlow类型的b:
import tensorflow as tf
import numpy as np
a = np.arange(0, 5)
b = tf.convert_to_tensor(a, dtype=tf.int64)
print("a:", a)
print("b:", b)
输出结果(观察numpy和TensorFlow类型输出的不同处):
a: [0 1 2 3 4]
b: tf.Tensor([0 1 2 3 4], shape=(5,), dtype=int64)
3.指定多值张量生成tf.fill、tf.zeros、tf.ones
创建全为0的张量、全为1的张量、以及全为指定值的张量:
tf.zeros(维度);
tf.ones(维度);
tf.fill(维度, 指定值)
例如:
import tensorflow as tf
a = tf.zeros([2, 3])
b = tf.ones(4)
c = tf.fill([2, 2], 9)
print("a:", a)
print("b:", b)
print("c:", c)
输出结果为:
a: tf.Tensor(
[[0. 0. 0.]
[0. 0. 0.]], shape=(2, 3), dtype=float32)
b: tf.Tensor([1. 1. 1. 1.], shape=(4,), dtype=float32)
c: tf.Tensor(
[[9 9]
[9 9]], shape=(2, 2), dtype=int32)
4.正态分布随机张量生成random.normal
生成指定维度的正态分布的随机数,默认均值为0,标准差为1;以及生成截断式正态分布的随机数(所谓截断式是指,所生成的数在均值加减两倍的方差以内,不会生成在此以外的数):
tf.random.normal(维度, mean=均值, stddev=标准差);
tf.random.truncated_normal(维度, mean=均值, stddev=标准差)
例如生成两行两列的张量:
import tensorflow as tf
d = tf.random.normal([2, 2], mean=0.5, stddev=1)
print("d:", d)
e = tf.random.truncated_normal([2, 2], mean=0.5, stddev=1)
print("e:", e)
输出结果为:
d: tf.Tensor(
[[ 2.4837193 -0.07892781]
[ 1.7919941 0.65845037]], shape=(2, 2), dtype=float32)
e: tf.Tensor(
[[ 0.7301492 -0.08809513]
[-1.1277094 0.30927265]], shape=(2, 2), dtype=float32)
5.均匀分布张量生成random.uniform
生成指定维度的均匀分布随机数(minval,maxval):
tf.random.uniform(维度, minval=最小值, maxval=最大值)
例如生成两行两列的张量,其中的每个元素都符合0到1之间的均匀分布:
import