常见的tensorflow开发基本步骤

(1)定义TensorFlow输入节点

    a.通过占位符定义[常用]:具体使用tf.placeholder函数

x=tf.placeholder("float")

    b.通过字典类型定义

inputdict={
    'x'=tf.placeholder("float"),
    'y'=tf.placeholder("float")
}

    c.直接定义

train_x = np.float32(np.linspace(-1,1,100))

(2)定义“学习参数“的变量

   a.直接定义:使用tf.Variable对参数直接定义

w=tf.Variable(tf.random_normal([1]),name="weight")
b=tf.Variable(tf.zeros([1]),name="bias")

 

   b.字典定义 【参数过多,一般使用这种】

#模型参数
paradict={
    'w':tf.Variable(tf.random_normal([1])),
    'b'=tf.Variable(tf.zeros([1]))
}
#计算
z=tf.multiply(X,paradict['w'])+paradict['b']

 

(3)定义运算

   a.正向传播模型

   b.定义损失函数:损失函数主要是计算”输出值“与”目标值“之间的误差,是配合反向传播使用的 

    

(4)优化函数

(5)初始化所有变量

init=tf.global_variables_initializer()
#使用这行代码,必须再所有变量和OP定义完成后,才能保证定义的内容有效

#启动Session
with tf.Session() as sess:
    sess.run(init)

(6)迭代更新参数到最优解

在迭代训练环节,都是需要建立一个session来完成的。在session中通过run来运行模型中的节点。

with tf.Session() as sess:

    # 向模型输入数据
    for epoch in range(training_epochs):
        for (x, y) in zip(train_X, train_Y):
            sess.run(optimizer, feed_dict={X: x, Y: y})

(7)测试模型:评估模型的好坏

(8)使用模型

完整代码:

mport tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt


plotdata = { "batchsize":[], "loss":[] }
def moving_average(a, w=10):
    if len(a) < w: 
        return a[:]    
    return [val if idx < w else sum(a[(idx-w):idx])/w for idx, val in enumerate(a)]


#生成模拟数据
train_X = np.linspace(-1, 1, 100) 
train_Y = 2 * train_X + np.random.randn(*train_X.shape) * 0.3 # y=2x,但是加入了噪声
#显示模拟数据点
plt.plot(train_X, train_Y, 'ro', label='Original data')
plt.legend()
plt.show()




# 创建模型
# 占位符
X = tf.placeholder("float")#代表x的输入
Y = tf.placeholder("float")#代表对应的真实值
# 模型参数
W = tf.Variable(tf.random_normal([1]), name="weight")#初始化为[-1,1]的随机数,形状为以维的数字
b = tf.Variable(tf.zeros([1]), name="bias")

# 前向结构
z = tf.multiply(X, W)+ b

#反向优化
'''将正向生成的值,观察其与真实值的差距,再通过反向过程将里面的参数进行调整,
接着再次正向生成预测值并与真实值进行对比,以此循环下去。'''
cost =tf.reduce_mean( tf.square(Y - z))#生成值与真实值的平方差
learning_rate = 0.01#学习速率,值越大,速度越快,但是越不精确,反之
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)
#训练模型----迭代
# 初始化所所有变量
init = tf.global_variables_initializer()
# 定义参数
training_epochs = 20
display_step = 2

# 启动session(Session创建好后,第一件事就是初始化)
with tf.Session() as sess:
    sess.run(init)

    # 向模型输入数据
    for epoch in range(training_epochs):
        for (x, y) in zip(train_X, train_Y):
            sess.run(optimizer, feed_dict={X: x, Y: y})

        #显示训练中的详细信息
        if epoch % display_step == 0:
            loss = sess.run(cost, feed_dict={X: train_X, Y:train_Y})
            print ("Epoch:", epoch+1, "cost=", loss,"W=", sess.run(W), "b=", sess.run(b))#测试
            if not (loss == "NA" ):
                plotdata["batchsize"].append(epoch)
                plotdata["loss"].append(loss)

    print (" Finished!")
    print ("cost=", sess.run(cost, feed_dict={X: train_X, Y: train_Y}), "W=", sess.run(W), "b=", sess.run(b))
    #print ("cost:",cost.eval({X: train_X, Y: train_Y}))

    #图形显示
    plt.plot(train_X, train_Y, 'ro', label='Original data')
    plt.plot(train_X, sess.run(W) * train_X + sess.run(b), label='Fitted line')
    plt.legend()
    plt.show()
    
    plotdata["avgloss"] = moving_average(plotdata["loss"])
    plt.figure(1)
    plt.subplot(211)
    plt.plot(plotdata["batchsize"], plotdata["avgloss"], 'b--')
    plt.xlabel('Minibatch number')
    plt.ylabel('Loss')
    plt.title('Minibatch run vs. Training loss')
     
    plt.show()

    print ("x=0.2,z=", sess.run(z, feed_dict={X: 0.2}))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值