层
创建层
创建密集连接层,并应用激活函数
x = tf.placeholder(tf.float32, shape=[None, 3]) linear_model = tf.layers.Dense(units=1) y = linear_model(x)
初始化层
包含变量的层都需要经过初始化
init = tf.global_variables_initializer()
sess.run(init)
执行层
print(sess.run(y, {x: [[1, 2, 3],[4, 5, 6]]})) # [[-3.41378999] # [-9.14999008]]
层函数的快捷方式
快捷方式是在单次调用中创建和运行层
x = tf.placeholder(tf.float32, shape=[None, 3]) y = tf.layers.dense(x, units=1) init = tf.global_variables_initializer() sess.run(init) print(sess.run(y, {x: [[1, 2, 3], [4, 5, 6]]}))
尽管这种方式很方便,但是无法访问 tf.layers.Layer 对象。这会让自省和调试变得困难,并且无法重复的使用相同的层。
训练
定义数据
定义一些输入x,以及每个输入值的预期输出值 y_true:
x = tf.constant([[1], [2], [3], [4]], dtype=tf.float32)
y_true = tf.constant([[0], [-1], [-2], [-3]], dtype=tf.float32)
定义模型
接下来,创建一个简单的线性模型,其输出值只有1个:
linear_model = tf.layers.Dense(units=1)
y_pred = linear_model(x)
搭建好模型后,我们可以运行一次,看看第一次运行的预测值:
sess = tf.Session() init = tf.global_variables_initializer() sess.run(init) print(sess.run(y_pred)) # [[ 0.02631879] # [ 0.05263758] # [ 0.07895637] # [ 0.10527515]]
损失
我们使用均方误差来定义损失函数,虽然可以使用用较低级别的数学运算手动定义,但 tf.losses 模块提供了一系列常用的损失函数。
loss = tf.losses.mean_squared_error(labels=y_true, predictions=y_pred) print(sess.run(loss)) # 2.23962
训练,TensorFlow提供了执行标准化算法啊的优化器 (tf.train.Optimizer
),最简单的是梯度下降法,由实现 tf.train.GradientDescentOptimizer
optimizer = tf.train.GradientDescentOptimizer(0.01) train = optimizer.minimize(loss) for i in range(100): _, loss_value = sess.run((train, loss)) print(loss_value) print(sess.run(y_pred))