1. Introducción
Tensorflow otorga gran importancia a la estructura. Tenemos que construir la estructura de la red neuronal antes de que podamos ponerle los números y ejecutar esta estructura.
2. Importe el módulo y cree datos
Primero, necesitamos cargar dos módulos, tensorflow y numpy, y usar numpy para crear nuestros datos.
import tensorflow as tf
import numpy as np
x_data = np.random.rand(100).astype(np.float32) #随机样本位于[0, 1)中
y_data = x_data*0.5 + 2
3. Construye el modelo
Usamos tf.Variable para crear parámetros que describan y. Podemos imaginar y_data = x_data * 0.1 + 0.3 como y = Weights * x + sesgos, y luego la red neuronal está aprendiendo a cambiar los pesos a 0.1 y los sesgos a 0.3.
Weights = tf.Variable(tf.random_uniform([1],-1.0,1.0)) #返回一维数组,产生于low和high之间,产生的值是均匀分布的 #tf.Variable()用于生成一个初始值为initial-value的变量;必须指定初始化值
biases = tf.Variable(tf.zeros([1]))
y = Weights*x_data + biases
4. Calcule el error y la transmisión inversa del error.
El siguiente es calcular el error de y e y_data. El trabajo de transferir el error de vuelta se enseña al optimizador. El método de transferencia de error que usamos es el método de descenso de gradiente: Descenso de gradiente Usemos el optimizador para actualizar los parámetros.
loss = tf.reduce_mean(tf.square(y-y_data)) #tf.reduce_mean用于计算张量tensor沿着指定的数轴(tensor的某一维度)上的的平均值
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
5. Entrena al modelo
Acabamos de construir la estructura de la red neuronal y no hemos usado esta estructura. Antes de usar esta estructura, primero debemos inicializar todas las Variables definidas previamente, por lo que este paso es muy importante
init = tf.global_variables_initializer() #返回一个用来初始化计算图中所有global variable的op
Luego, creamos una Sesión de Sesión. Usamos Sesión para realizar el paso de inicialización de inicio. Y, usamos Sesión para ejecutar cada dato de entrenamiento. Mejore gradualmente la precisión de predicción de la red neuronal.
sess = tf.Session() #创建一个会话
sess.run(init) #用 Session 来执行 init 初始化
for step in range(301): #定义300次迭代
sess.run(train)
if step%20 == 0: #每隔20次打印一次权重和偏置
print(step, sess.run(Weights),sess.run(biases))
Se puede ver que el peso final y el desplazamiento están muy cerca del peso y el desplazamiento de y_data = x_data * 0.5 + 2.