TensorFlow-深度学习-02-Feed与Fetch

Feed:

feed_dict={x:[[1,2],[3,4]],y:[[5],[6]]}

上面的feed_dict的作用是什么?在机器学习中,经常听别人说到要把数据给喂进去。怎么喂进去,这就要使用feed_dict={x:input_x,y:input_y}把数据喂进去,喂进去的数据可以是矩阵,可以是数组,也可以是常数。

Fetch:

x_result,y_result=sess.run([x,y])

Fetch就是把…取出来,比如上面的一条代码,把x,y的数据取出来,分别赋给x_result,y_result,需要注意的一点是,x,y必须与赋值一一对应,fetch里面有几个元素,被赋值的必须有几个元素。如下图:

下面做一个简单的训练:

import tensorflow as tf
import cv2 as cv
import numpy as np

def image_define(a):  #定义输入数据
    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])
    return data / 255

def feed_fetch():
    x = tf.placeholder(shape=[1, 784], dtype=tf.float32)
    y = tf.placeholder(dtype=tf.float32)  # 精确值
    w = tf.Variable(tf.random_normal(shape=[784, 1]))
    b = tf.Variable(tf.random_normal(shape=[1, 1]))

    y_ = tf.add(tf.matmul(x, w),b)  # 拟合的近似值
    loss = tf.reduce_sum(tf.square(tf.subtract(y, y_)))  # 总损失值,tf.reduce_sum用来求和,tf.square平方函数
    learn = tf.train.GradientDescentOptimizer(0.01)  # 学习率,梯度下降
    step = learn.minimize(loss)  # 梯度下降一次加1,一般用于记录迭代优化的次数,主要用于参数输出和保存

    x_input=image_define(4)
    init = tf.global_variables_initializer()  # 初始化
    with tf.Session() as sess:
        sess.run(init)
        for i in range(100):  # 训练迭代100次
            y_result, curr_loss, curr_step = sess.run(fetches=[y_, loss, step], feed_dict={x: x_input, y: 4})  #fetch取数据,feed喂数据
            print("y: %f, y_ : %f, loss : %f" % (4,y_result, curr_loss))
        curr_w,curr_b=sess.run([w,b],feed_dict={x:x_input,y:4})  # w值,b值
        print("curr_w:\n",curr_w)
        print("curr_b:\n",curr_b)

if __name__ =="__main__":
    feed_fetch()


运行结果:
TensorFlow-深度学习-02-Feed与Fetch_第1张图片
在这里插入图片描述
可以看到,训练的数据越来越接近4,损失值越来越低,其实到后面就变成0了,如下:
TensorFlow-深度学习-02-Feed与Fetch_第2张图片
最终的估计值在4.0上下徘徊。

你可能感兴趣的:(Tensorflow)