1.placeholder传入值
可以理解为提前占据一个存储空间,比如说你在一个城市中心买了一套房子,这个房子你也不知道是用来放货物还是用来住人的,但是你可以提前将这栋房子买下来,等以后再说以后的事情。
tf.placeholder(type,shape) ,像是 a = tf.placeholder(tf.float32,[2,3],keep_prob:0.5)
第一个参数tf.float32是a的类型
第二个参数[2,3]是要输入的矩阵的维数,即输入一个两行三列的矩阵
第三个参数 keep_prob 是设置神经元被选中的概率,在初始化是keep_prob是一个占位符keep_prob = tf.placeholder(tf.float32),但是在神经网络run时设置具体的值,像是keep_prob:0.5,即随机选取一半的神经元进行激活,在不同的训练过程中随机扔掉一部分神经元,也就是让某个神经元的激活值以一定的概率p,让其停止工作,这次训练过程中不更新权值,也不参加神经网络的计算。但是它的权重得保留下来(只是暂时不更新而已),因为下次样本输入时它可能又得工作了。
示意图如下:
2.feed_dict喂食器
在这里我的理解是将要输入的数据直接喂入placeholder传入值中,但是不是什么数据类型都可以喂入,比如说刚才我在placeholder传入值的时候设定是float型和维度为两行三列的矩阵,那么必须要喂入符合要求的矩阵,要不然会出错,比如能吃一个馒头,你让人家吃两个或吃半个都不好对吧
3.废话不多说,直接上例子
# -*- coding: utf-8 -*-
"""
Created on Sat Mar 17 20:35:14 2018
@author: DuYanfang
"""
import tensorflow as tf
a = tf.placeholder(tf.int32)
b = tf.placeholder(tf.int32)
c= tf.multiply(a,b)
with tf.Session() as sess:
print(sess.run(c,feed_dict = {a:100,b:200}))
x1 = tf.placeholder(tf.float32,[2,3])
x2 = tf.placeholder(tf.float32,[3,2])
x3 = tf.matmul(x1,x2)
with tf.Session() as sess:
print(sess.run(x3,feed_dict = {x1:[[1,2,3],[4,5,6]],x2:[[1,2],[3,4],[5,6]]}))
运行结果:
20000
[[ 22. 28.]
[ 49. 64.]]