AI 大框架分析基于python之TensorFlow(归一化处理,多类别分类的概率)

AI 大框架分析基于python之TensorFlow(归一化处理,多类别分类的概率)

AI(人工智能)的大框架有很多种,以下是一些常见的AI框架:
TensorFlow:由谷歌开发的开源机器学习框架,支持各种任务,包括图像识别、自然语言处理等。
PyTorch:由Facebook开发的开源深度学习框架,强调动态计算图和易用性。
Keras:一个高级神经网络API,可以在多个底层框架上运行,如TensorFlow和Theano。
Caffe:一个用于图像分类和卷积神经网络的深度学习框架。
Microsoft Cognitive Toolkit(CNTK):由微软开发的深度学习工具包,支持分布式训练和高性能计算。
MXNet:一个可扩展的深度学习框架,可以在多台机器上进行分布式训练。

tf.keras.utils.normalize 是 TensorFlow 中的一个方法,用于对数据进行归一化处理。归一化是一种常用的数据预处理技术,目的是将数据缩放到一个特定的范围内,常见的是将数据缩放到0到1之间。

示例代码:

import tensorflow as tf

data = tf.constant([[1, 2, 3], [4, 5, 6]], dtype=tf.float32)
normalized_data = tf.keras.utils.normalize(data, axis=-1, order=2)
print(normalized_data)

输出结果:

tf.Tensor(
[[0.26726124 0.5345225  0.80178374]
 [0.4558423  0.5698029  0.68376344]], shape=(2, 3), dtype=float32)

参数说明:
x:输入的张量,可以是任意形状的张量。
axis:指定归一化的轴,默认为最后一个轴(-1),可以是一个整数或一个整数列表。
order:归一化的阶数,默认为2,表示按照L2范数进行归一化,也可以设置为1表示按照L1范数进行归一化。

下面是一个使用tf.keras模块构建和训练一个简单的分类模型的例子:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
# 构建模型
model = keras.Sequential([
    layers.Dense(64, activation='relu', input_shape=(784,)),
    layers.Dense(10, activation='softmax')
])

# 编译模型
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# 加载数据集
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()

# 数据预处理
x_train = x_train.reshape(-1, 784).astype('float32') / 255.0
x_test = x_test.reshape(-1, 784).astype('float32') / 255.0
#MNIST数据集中的图像像素值的范围是0到255,通过将每个像素值除以255,可以将其缩放到0到1之间的范围。这样做有助于提高模型的训练效果和收敛速度。

# 模型训练
model.fit(x_train, y_train, epochs=5, batch_size=32, validation_data=(x_test, y_test))

# 模型评估
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
print('Test accuracy:', test_acc)

ReLU是一种常用的激活函数,它将负输入值设为0,正输入值保持不变。ReLU函数的定义为:f(x) = max(0, x)。
这个例子里面用的是input_shape=(784,)代表它处理的是一个一维数据;如果输入数据是一个大小为3x3的矩阵,可以将input_shape=(3, 3)作为参数传递给相应的层。
在神经网络的每个神经元中,激活函数的作用是引入非线性性,使得神经网络能够更好地拟合非线性关系。ReLU激活函数具有以下优点:
非线性:ReLU对于正输入值保持不变,因此能够学习非线性关系,帮助神经网络拟合复杂的数据。
计算简单:ReLU的计算非常简单,只需要判断输入值是否大于零并保持不变。相比其他激活函数,如sigmoid或tanh函数,ReLU的计算效率更高。
缓解梯度消失:ReLU在正输入值区域梯度为1,避免了梯度消失的问题,使得反向传播时梯度能够有效传递。

在神经网络中,通常在隐藏层中使用ReLU激活函数,而在输出层中根据具体的任务选择不同的激活函数。对于分类问题,常用的输出层激活函数是softmax,对于回归问题,可以使用线性激活函数或不使用激活函数。

对于分类问题中的多类别分类,常用的输出层激活函数是softmax函数。softmax函数是一种将实数向量映射为概率分布的函数。它将每个元素的值转化为一个介于0和1之间的概率,且所有元素的概率之和为1。
softmax函数的定义如下: f(x) = exp(x) / sum(exp(x_i)) for i in range(n)
其中,x是输入向量,n是向量的维度。
在多类别分类问题中,输出层通常具有与类别数相等的神经元。通过使用softmax激活函数,神经网络可以将输入的实数值转换为表示每个类别的概率分布。模型将预测的概率最大的类别作为最终的分类结果。
例如,对于一个具有3个类别的分类问题,输出层使用了softmax激活函数后,输出的向量可以表示为 [0.2, 0.5, 0.3],其中每个元素的值表示对应类别的概率。

model.compile(optimizer=‘adam’, loss=‘sparse_categorical_crossentropy’, metrics=[‘accuracy’])这行代码是用于编译神经网络模型的函数调用,其中的三个参数分别是optimizer、loss和metrics。
optimizer(优化器)参数指定了用于优化模型参数的算法。'adam’是一种常用的优化器,它基于随机梯度下降算法,并结合了动量和自适应学习率的技巧。Adam优化器可以在训练过程中自动调整学习率,具有较快的训练速度和良好的收敛性。
loss(损失函数)参数指定了模型在训练过程中使用的损失函数。'sparse_categorical_crossentropy’是一种常用的损失函数,适用于多类别分类问题。它计算模型预测结果与真实标签之间的交叉熵损失,帮助模型学习正确的类别概率分布。
metrics(评估指标)参数指定了模型在训练和测试过程中需要计算和报告的性能指标。[‘accuracy’]表示模型将计算并报告准确率作为评估指标。准确率是分类问题中常用的评估指标,它表示模型在所有预测中正确分类的样本比例。

model.fit(x_train, y_train, epochs=5, batch_size=32, validation_data=(x_test, y_test))是用于训练神经网络模型的函数调用。下面是对其中各个参数的详细解释:
x_train:训练集的输入数据。它是一个形状为(n_samples, n_features)的NumPy数组,其中n_samples表示训练样本的数量,n_features表示每个样本的特征数量。
y_train:训练集的标签数据。它是一个形状为(n_samples,)的NumPy数组,其中n_samples表示训练样本的数量。标签数据用于指示每个训练样本的真实类别或目标值。
epochs:训练的轮数。一个轮次(epoch)表示模型使用整个训练集进行一次前向传播和反向传播的过程。通过指定轮次数,可以控制模型训练的总次数。
batch_size:批大小。它指定了每次进行参数更新时使用的训练样本数量。将训练集分成多个批次可以加快训练过程,并且可以利用硬件加速的特性。
validation_data:验证数据。它是一个元组(x_val, y_val),其中x_val是用于验证模型性能的输入数据,y_val是对应的标签数据。在每个训练轮次结束后,模型将使用验证数据计算并报告验证指标,例如准确率或损失值。

verbose是用于控制输出信息的参数。
参数verbose有三个可能的取值:
verbose=0:不输出任何信息。
verbose=1:输出进度条,显示每个epoch的训练进度。
verbose=2:显示每个epoch的训练进度,并额外显示每个epoch结束后的评估指标。

猜你喜欢

转载自blog.csdn.net/kirsten111111/article/details/133610689