成本函数中不能使用距离,而应当使用概率分布的差异,例如:交叉熵函数;而实际结果的概率分布常用one-hot,预测结果的概率分布常用softmax。
import tensorflow as tf
import numpy
# [First] TensorFlow图
y = tf.matmul(x,W) + b
cost = tf.reduce_mean(tf.square(y_-y))
# [Second] 用固定「学习率(learn_rate)」训练
learn_rate = 0.1
train_step =
tf.train.GradientDescentOptimizer(learn_rate).minimize(cost)
# 修改 [Second] 以调整学习率,将 'learn_rate' 设置为'tf.placeholder'
# 并将其提供给'learning_rate'参数名tf.train.GradientDescentOptimizer
learn_rate = tf.placeholder(tf.float32, shape=[])
train_step = tf.train.GradientDescentOptimizer(
learning_rate=learn_rate).minimize(cost)
#[Third]三种batch模式
for i in range(steps):
if datapoint_size == batch_size:
# Batch 模式,所以选择所有数据点从 index 0 开始
batch_start_idx = 0
elif datapoint_size < batch_size:
# 不可能
raise ValueError(“datapoint_size: % d, must
be
greater
than
batch_size: % d” % (datapoint_size, batch_size))
else:
# 随机/mini-batch模式: 从所有可能的数据点中分批选择数据点
batch_start_idx = (i * batch_size) % (datapoint_size — batch_size)
batch_end_idx = batch_start_idx + batch_size
batch_xs = all_xs[batch_start_idx:batch_end_idx]
batch_ys = all_ys[batch_start_idx:batch_end_idx]
# 将分批的数据点定义为xs, ys, 它们会被送入 'train_step'训练步骤
xs = np.array(batch_xs)
ys = np.array(batch_ys)
# [Forth] 在每个步骤/epoch将数据送入'train_step'
feed = {x: xs, y_: ys}
sess.run(train_step, feed_dict=feed)
# 修改[Forth]以更改学习率,包含送入一个'learn_rate'值,
# 即 'initial_learn_rate'(初始学习率)除以'i' (当前epoch数)
# 注: 这是过于简化的,仅用作示例
feed = {x: xs, y_: ys, learn_rate: initial_learn_rate / i}
sess.run(train_step, feed_dict=feed)
#多特征训练
x = tf.placeholder(tf.float64,[m,n])
W = tf.Variable(tf.zeros[n, 1])
y = tf.matmul(x,W)
b = tf.Variable(tf.zeros[1])
y = tf.matmul(x,W)+b
with session:
session.run()#feed_dict获取数据```