sigmoid 函数是人工神经网络中最常用的非线性激活函数之一,其定义为:$$ \sigma(x) = \frac{1}{1+e^{-x}} $$
在 TensorFlow 中,sigmoid 函数的实现为 tf.nn.sigmoid
作用
sigmoid 函数在人工神经网络中被广泛应用,可用于处理分类、回归等任务。特别地,sigmoid 函数在二分类问题中应用最为广泛,其在输出层用于将神经网络的输出映射为相应的概率。
使用方法
基本使用
在 TensorFlow 中,实现 sigmoid 函数的方式有多种,最常见的是调用 tf.nn.sigmoid
函数。使用示例如下:
import tensorflow as tf
# 创建输入张量
data = tf.constant([-1, 0, 1, 2], dtype=tf.float32)
# 计算sigmoid
result = tf.nn.sigmoid(data)
# 打印结果
with tf.Session() as sess:
print(sess.run(result))
输出结果为:
[0.26894143 0.5 0.7310586 0.880797 ]
实际应用
下面,我们通过两个实际的应用例子,说明 sigmoid 函数的更多用法。
应用1: 使用sigmoid函数进行二分类
import tensorflow as tf
import numpy as np
# 创建输入和标签
x_data = np.random.randn(100)
y_data = np.random.randint(0, 2, 100)
# 创建模型
x = tf.placeholder(dtype=tf.float32, shape=[1])
w = tf.Variable(initial_value=tf.random_normal(shape=[1], mean=0, stddev=1.0))
b = tf.Variable(initial_value=tf.zeros([1]))
y = tf.nn.sigmoid(w * x + b)
# 定义损失函数和梯度下降算法
y_ = tf.placeholder(dtype=tf.float32, shape=[1])
loss = tf.reduce_mean(tf.square(y - y_))
optimizer = tf.train.GradientDescentOptimizer(0.1)
train_op = optimizer.minimize(loss)
# 训练模型
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(1000):
for j in range(100):
_, loss_val = sess.run([train_op, loss], feed_dict={x: [x_data[j]], y_: [y_data[j]]})
if j % 10 == 0:
print('Epoch %d, mini-batch %d, loss: %.2f' % (i, j, loss_val))
在这个例子中,我们使用 sigmoid 函数将神经网络的输出转化为二分类概率,然后使用梯度下降算法训练模型。
应用2: 使用sigmoid函数进行多标签分类
import tensorflow as tf
import numpy as np
# 创建输入和标签
x_data = np.random.randn(100, 10)
y_data = np.random.randint(0, 2, [100, 5])
# 创建模型
x = tf.placeholder(dtype=tf.float32, shape=[None, 10])
w = tf.Variable(initial_value=tf.random_normal(shape=[10, 5], mean=0, stddev=1.0))
b = tf.Variable(initial_value=tf.zeros([5]))
y = tf.nn.sigmoid(tf.matmul(x, w) + b)
# 定义损失函数和梯度下降算法
y_ = tf.placeholder(dtype=tf.float32, shape=[None, 5])
loss = tf.reduce_mean(tf.square(y - y_))
optimizer = tf.train.GradientDescentOptimizer(0.1)
train_op = optimizer.minimize(loss)
# 训练模型
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(1000):
_, loss_val = sess.run([train_op, loss], feed_dict={x: x_data, y_: y_data})
if i % 50 == 0:
print('Epoch %d, loss: %.2f' % (i, loss_val))
在这个例子中,我们使用 sigmoid 函数将神经网络的输出转化为多个二分类概率,然后使用梯度下降算法训练模型。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解TensorFlow的 tf.nn.sigmoid 函数:sigmoid 激活函数 - Python技术站