• 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)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    输出结果:

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

    参数说明:
    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    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结束后的评估指标。

  • 相关阅读:
    Clion C项目集成sqlite、IDE插件连接与C代码连接基本操作
    ROS + vscode环境搭建
    学习Spring5必知必会(4)~使用注解配置、使用java代码配置
    你还弄不清xxxForCausalLM和xxxForConditionalGeneration吗?
    如何在 Inno Setup 中关联多种文件格式
    ChatGPT 现在可以看、听和说话了!
    Android中 Applicaton Context,Service context, Activity context 的区别。
    laravel+sse实现实时推送
    05-旭日X3派测评——Open Cv &Pangolin等库安装&ORB_SLAM2 安装运行
    CentOS、Docker安装RabbitMQ,常用命令,web管理插件
  • 原文地址:https://blog.csdn.net/kirsten111111/article/details/133610689