Tensorflow记录:最简单的tensorflow神经网络训练教程

1. import需要的模块

import tensorflow as tf
import numpy as np

本文使用的是1.13.1版本的tensorflow

2. 创建data

x_data = tf.Variable(tf.random_normal([100,100,3]))
y_data = x_data*0.1+0.3

x_data是网络的原始输入data; y_data 是网络的原始目标data,网络学习的目的就是让下面的y_pred尽可能地接近y_data。
这里y_data 实质上是: x_data * W + b,即一个一阶的线性结构,比较简单

3.创建tensorflow结构

Weights = tf.Variable(tf.random_uniform([1], -1.0, 1)) 
biases = tf.Variable(tf.zeros([1]))
y_pred = x_data*Weights+biases

loss = tf.reduce_mean(tf.square(y_pred-y_data))
# optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.5)
optimizer = tf.train.AdamOptimizer(learning_rate=0.001)
train = optimizer.minimize(loss)

Weights为网络的权重,式子为创建1维的范围在(-1,1)的随机正态分布的数据
biases为网络的偏置,式子为创建1维的初始为0的偏置
y_pred为网络的预测值
loss为网络的预测值y_pred和真实y_data的差距,我们要最小化这个差距
optimizer为网络的优化方式,这里采用了learning rate 为0.1的Adam方法
train为通过optimizer最小化loss的式子

4.开始训练

init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    for step in range(201):
        sess.run(train)
        if step % 20 ==0:
            print('step:{}, Weights:{}, biases:{},loss:{:.6f}'.format(step, sess.run(Weights), sess.run(biases),sess.run(loss)))

在真正训练网络之前,由于tensorflow为静态图,实际上图中并没有数据,只是有框架,我们通过init进行初始化,初始化后数据才真正导入静态图中并开始运转训练
同时,tensorflow必须创建一个session会话,在session会话中运行程序
这里我们一共训练201步,训练指针指向train,每训练20步,就打印一次weights,biases以及loss
最终得到:

step:0, Weights:[0.8724913], biases:[0.001],loss:0.682923
step:20, Weights:[0.8525715], biases:[0.02088401],loss:0.622190
step:40, Weights:[0.83300936], biases:[0.04023951],loss:0.566803
step:60, Weights:[0.8139575], biases:[0.0588202],loss:0.516814
step:80, Weights:[0.7954449], biases:[0.0765582],loss:0.471800
step:100, Weights:[0.7774595], biases:[0.09344673],loss:0.431251
step:120, Weights:[0.7599819], biases:[0.10949299],loss:0.394689
step:140, Weights:[0.74299145], biases:[0.12470748],loss:0.361687
step:160, Weights:[0.726469], biases:[0.13910219],loss:0.331864
step:180, Weights:[0.71039575], biases:[0.1526907],loss:0.304883
step:200, Weights:[0.69475424], biases:[0.1654884],loss:0.280443

可以看到,loss随着训练次数的增加,一步步降低了。
训练的速度可以通过修改learning rate进行改变,大的learning rate训练速度快,但是不容易找到最优解;小的learning rate训练速度慢,但是容易找到最优解。在实际工程中,一般采用的是learning rate 递减的策略,即随着训练的增加,逐渐下调learning rate 以达到最优的训练效果。

本文实际为借鉴“莫烦python”的视频教程,意在最短时间内学习到如何建立一个简单网络,具体更多细节请看:
莫烦python的tensorflow教程

猜你喜欢

转载自blog.csdn.net/qq_38372240/article/details/104627374
今日推荐