ตัวอย่างข้อมูล:
import numpy as np
import tensorflow as tf
### Model parameters ###
W = tf.Variable([.3], tf.float32)
b = tf.Variable([-.3], tf.float32)
### Model input and output ###
x = tf.placeholder(tf.float32)
linear_model = W * x + b
y = tf.placeholder(tf.float32)
### loss ###
loss = tf.reduce_sum(tf.square(linear_model - y)) # sum of the squares
### optimizer ###
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
### training data ###
x_train = [1,2,3,4]
y_train = [0,-1,-2,-3]
### training loop ###
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init) # reset values to wrong
for i in range(1000):
sess.run(train, {x:x_train, y:y_train})
ในฐานะที่เป็นชื่อที่บอกว่าตัวยึดตำแหน่งเป็นสัญญาว่าจะให้ค่าในภายหลังคือ
ตัวแปรเป็นเพียงพารามิเตอร์การฝึกอบรม ( W
(เมทริกซ์), b
(อคติ) เหมือนกับตัวแปรปกติที่คุณใช้ในการเขียนโปรแกรมแบบวันต่อวันซึ่งผู้ฝึกสอนจะอัปเดต / แก้ไขในแต่ละการวิ่ง / ขั้นตอน
ในขณะที่ตัวยึดตำแหน่งไม่ต้องการค่าเริ่มต้นใด ๆ ที่เมื่อคุณสร้างx
และy
TF ไม่ได้จัดสรรหน่วยความจำใด ๆ แทนในภายหลังเมื่อคุณป้อนตัวยึดตำแหน่งในการsess.run()
ใช้feed_dict
งาน TensorFlow จะจัดสรรหน่วยความจำขนาดที่เหมาะสมสำหรับพวกเขา ( x
และy
) ness ช่วยให้เราสามารถป้อนขนาดและรูปร่างของข้อมูลได้
โดยสรุป :
ตัวแปร - เป็นพารามิเตอร์ที่คุณต้องการให้ผู้ฝึกสอน (เช่น GradientDescentOptimizer) เพื่ออัปเดตหลังจากแต่ละขั้นตอน
ตัวยึดตำแหน่ง -
a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
adder_node = a + b # + provides a shortcut for tf.add(a, b)
การดำเนินการ:
print(sess.run(adder_node, {a: 3, b:4.5}))
print(sess.run(adder_node, {a: [1,3], b: [2, 4]}))
ทำให้เกิดผลลัพธ์
7.5
[ 3. 7.]
ในกรณีแรก 3 และ 4.5 จะถูกส่งผ่านไปยังa
และb
ตามลำดับจากนั้นไปที่ adder_node ouputting 7 ในกรณีที่สองมีรายการฟีดจะมีการเพิ่มขั้นตอนแรก 1 และ 2 ถัดไป 3 และ 4 ( a
และb
)
อ่านที่เกี่ยวข้อง:
Variable
s แต่ไม่ใช่placeholder
s (ซึ่งต้องระบุค่าเสมอ)