TensorFlow入门:Feed和Fetch

#coding=utf-8
import tensorflow as tf
import numpy as np
import cv2 as cv
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
def get_x(a):
    #生成一个28*28的全黑图像,数据类型是单通道(黑白)
    image = np.zeros([28, 28], dtype=np.uint8)
    #在图像中心位置(可以调整)输入字符串,字符颜色为白色
    cv.putText(image, str(a), (7, 21), cv.FONT_HERSHEY_PLAIN, 1.3, (255), 2, 8)
    cv.imshow("image", image)
    #转换为一维数组
    data = np.reshape(image, [1, 784])
    #除以255的原因是防止后面做矩阵乘法的时候结果溢出
    return data / 255

def feed_fetch():
    #输入数据为1行784列的一维数组
    x = tf.placeholder(shape=[1, 784], dtype=tf.float32)
    #另一个输入数据是一个浮点数
    y = tf.placeholder(dtype=tf.float32)
    #产生一个784行,1列的随机数变量
    w = tf.Variable(tf.random_normal([784, 1]))
    #产生一个随机数变量
    b = tf.Variable(tf.random_normal([1, 1]))
    #输入常量矩阵和tf的变量矩阵做乘法,其结果是一个1*1的数据,再加上一个tf的变量
    y_ = tf.add(tf.matmul(x, w), b)
    #输入数据和上一步得到的结果相减,再做平方得到损失值
    loss = tf.reduce_sum(tf.square(tf.subtract(y, y_)))
    #对所有步骤中的所有变量使用恒定的学习率
    train = tf.train.GradientDescentOptimizer(0.01)
	#训练方向
    step = train.minimize(loss)

    #全局初始化tf的变量
    init = tf.global_variables_initializer()
    #得到输入数据(1*784)
    x_input = get_x(4)
    #为tf.Session()取个别名为sess
    with tf.Session() as sess:
        #先在tf的会话中初始化变量
        sess.run(init)
        #训练100次
        for i in range(100):
            #通过feed_dict以占位符的形式传入2个输入数据,每次返回单次计算结果y_,损失值,训练方向
            y_result, curr_loss, curr_step = sess.run([y_, loss, step], feed_dict={x:x_input, y:4})
            if i % 10 == 0:
                print("y_ : %f, loss : %f"%(y_result, curr_loss))
        #得到训练后的2个tf的当前变量
        curr_w, curr_b = sess.run([w, b], feed_dict={x: x_input, y: 4})
        print("curr_w : ", curr_w)
        print("curr_b : ", curr_b)

feed_fetch()

结果如下:

y_ : -7.435988, loss : 130.781830
y_ : 1.999831, loss : 4.000674
y_ : 3.650170, loss : 0.122381
y_ : 3.938816, loss : 0.003744
y_ : 3.989301, loss : 0.000114
y_ : 3.998127, loss : 0.000004
y_ : 3.999675, loss : 0.000000
y_ : 3.999945, loss : 0.000000
y_ : 3.999990, loss : 0.000000
y_ : 4.000000, loss : 0.000000
('curr_w : ', array([[-1.62017003e-01],
       [-7.97585249e-01],
       [ 1.45355070e+00],
       [ 1.61123681e+00],
       [ 2.62109727e-01],

很明显y_在随着训练次数的增加逐步接近我们的输入比较值,且损失函数也逐步趋近于0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值