游戏AI的创造思路-技术基础-深度学习(6)

让人工智障具备信念吧,依莫拉萨~~~串频道+暴露年龄。。。不过深度信念和信念真的没啥关系,不知道为啥这样起名

目录

3.6. 深度信念网络(DBN)

3.6.1. 定义

3.6.2. 发展历史

3.6.3. 算法公式

3.6.4. 运行原理

3.6.4.1. 基本原理

3.6.4.2. Python实现

3.6.4.2.1.简单实现

3.6.4.2.2. DBN训练过程

3.6.4.2.3. DBN的重构函数

3.6.4.3. C++实现方法讨论

3.6.5. 优缺点

3.6.6.游戏AI中使用该算法的场景、方法

3.6.6.1.概述

3.6.6.2. 智能控制游戏AI的算法示例


3.6. 深度信念网络(DBN)

3.6.1. 定义

深度信念网络是由多层受限玻尔兹曼机(Restricted Boltzmann Machines, RBM)堆叠而成的生成式图模型。

它包含多个层次,每一层都学习数据中的高级抽象特征。

在DBN中,最底层是可见层,负责接收输入数据;而顶层及其它所有隐藏层则是RBM。

3.6.2. 发展历史

深度信念网络由Geoffrey Hinton和他的研究小组在2006年首次提出。

这一模型的提出在深度学习领域具有里程碑意义,因为它通过无监督学习有效地训练多层神经网络,克服了传统神经网络训练的一些难题,推动了深度学习的发展。

3.6.3. 算法公式

在DBN中,每一层RBM的学习过程涉及到权重的调整。假设DBN由L层组成,第l层的RBM有权重矩阵(W^l)和偏置向量(b^l)。前向传播过程(从可见层到隐层)中,对于第l层,其隐层变量(z^l)的激活概率由以下公式给出:

[ p(z^l | x^{l-1}) = \sigma(W^l \cdot x^{l-1} + b^l) ]

其中,(\sigma)是sigmoid函数,用于将线性加权和转化为概率分布。反向传播过程(从隐层到可见层)类似,但方向相反。

3.6.4. 运行原理

3.6.4.1. 基本原理

DBN的运行原理基于两个主要阶段:无监督的预训练有监督的微调

无监督的预训练:在这个阶段,每个RBM层独立地进行无监督训练,学习数据的分布。这通过对比散度(Contrastive Divergence)算法实现,该算法能够近似最大化数据的似然函数。

有监督的微调:在预训练完成后,DBN可以使用有标签的数据进行微调,以提高在特定任务上的性能。这通常通过反向传播算法和梯度下降来实现。

3.6.4.2. Python实现
3.6.4.2.1.简单实现

在Python中,我们通常使用深度学习库如TensorFlow或PyTorch来实现DBN。以下是一个简化的DBN实现示例,使用TensorFlow和Keras:

import numpy as np  
import tensorflow as tf  
from tensorflow.keras.layers import Dense  
from tensorflow.keras.models import Sequential, Model  
from tensorflow.keras.layers import Input  
  
# 定义RBM模型  
class RBM(tf.keras.Model):  
    def __init__(self, num_visible, num_hidden):  
        super(RBM, self).__init__()  
        self.num_hidden = num_hidden  
        self.num_visible = num_visible  
        self.weights = tf.Variable(tf.random.normal([self.num_visible, self.num_hidden]))  
        self.bias_hidden = tf.Variable(tf.zeros([self.num_hidden]))  
        self.bias_visible = tf.Variable(tf.zeros([self.num_visible]))  
  
    # ... (此处省略RBM的前向传播、反向传播等方法的实现)  
  
# 定义DBN模型  
class DBN(Model):  
    def __init__(self, rbm_layers, output_size):  
        super(DBN, self).__init__()  
        self.rbm_layers = rbm_layers  
        self.output_layer = Dense(output_size, activation='softmax')  
  
    def call(self, inputs):  
        x = inputs  
        for rbm in self.rbm_layers:  
            x = rbm(x)  # 这里假设RBM类实现了__call__方法来进行前向传播  
        x = self.output_layer(x)  
        return x  
  
# 示例:构建一个具有两个RBM层的DBN模型  
rbm1 = RBM(num_visible=784, num_hidden=500)  # 假设输入是28x28的图像  
rbm2 = RBM(num_visible=500, num_hidden=250)  
dbn = DBN(rbm_layers=[rbm1, rbm2], output_size=10)  # 假设有10个类别  
  
# 编译模型(仅用于输出层)  
dbn.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])  
  
# 假设X_train和y_train已经准备好  
# dbn.fit(X_train, y_train, epochs=10, batch_size=32)

上述代码是一个高度简化的示例,用于说明DBN的基本结构。

3.6.4.2.2. DBN训练过程

在实际应用中,你需要实现RBM的前向传播、反向传播(例如,使用CD-k算法)以及DBN的训练过程。以下是DBN训练过程python代码(示例):

深度信念网络(DBN)的训练过程通常分为两步:

首先是无监督的逐层预训练,然后是有监督的微调。

以下是一个简化的DBN训练过程的Python代码示例,使用了scikit-learnnumpy库。

首先,我们需要定义一个RBM类来实现受限玻尔兹曼机的功能:

import numpy as np  
from sklearn.neural_network import BernoulliRBM  
  
class RBMModel:  
    def __init__(self, num_visible, num_hidden, learning_rate=0.01, n_iter=10, batch_size=10):  
        self.num_visible = num_visible  
        self.num_hidden = num_hidden  
        self.rbm = BernoulliRBM(n_components=num_hidden, learning_rate=learning_rate, n_iter=n_iter, batch_size=batch_size, verbose=0)  
  
    def fit(self, X):  
        self.rbm.fit(X)  
  
    def transform(self, X):  
        return self.rbm.transform(X)

然后,我们可以定义一个DBN类,该类将使用RBM类进行逐层预训练,并添加一个逻辑回归层进行有监督学习:

from sklearn.linear_model import LogisticRegression  
  
class DBN:  
    def __init__(self, rbm_layers_sizes, learning_rate=0.01, n_iter=10, batch_size=10):  
        self.rbm_layers = []  
        self.learning_rate = learning_rate  
        self.n_iter = n_iter  
        self.batch_size = batch_size  
          
        # 初始化RBM层  
        for i in range(len(rbm_layers_sizes) - 1):  
            visible_size = rbm_layers_sizes[i]  
            hidden_size = rbm_layers_sizes[i + 1]  
            rbm = RBMModel(visible_size, hidden_size, learning_rate, n_iter, batch_size)  
            self.rbm_layers.append(rbm)  
  
    def pretrain(self, X):  
        current_data = X  
        for rbm in self.rbm_layers:  
            rbm.fit(current_data)  
            current_data = rbm.transform(current_data)  
  
    def finetune(self, X, y):  
        # 使用最顶层的RBM转换数据  
        transformed_X = self.transform(X)  
        # 使用逻辑回归进行微调  
        self.logistic_regression = LogisticRegression(max_iter=1000)  
        self.logistic_regression.fit(transformed_X, y)  
  
    def transform(self, X):  
        current_data = X  
        for rbm in self.rbm_layers:  
            current_data = rbm.transform(current_data)  
        return current_data  
  
    def predict(self, X):  
        transformed_X = self.transform(X)  
        return self.logistic_regression.predict(transformed_X)

现在,使用以下代码来训练DBN:

# 假设 X_train 是训练数据,y_train 是对应的标签  
X_train = ...  # 输入数据,形状为 (样本数, 特征数)  
y_train = ...  # 标签数据  
  
# 定义DBN结构,例如输入层有784个节点(对应于28x28的图像),两个隐藏层分别有500和250个节点  
dbn = DBN([784, 500, 250])  
  
# 进行逐层预训练  
dbn.pretrain(X_train)  
  
# 进行有监督的微调  
dbn.finetune(X_train, y_train)  
  
# 使用训练好的DBN进行预测  
predictions = dbn.predict(X_train)

以上示例使用了scikit-learn中的BernoulliRBMLogisticRegression,它们可能不是最优的选择,特别是对于大型数据集或复杂任务。在实际应用中,你可能需要使用更高级的库(如TensorFlow或PyTorch)来实现更高效的RBM和微调过程。此外,为了获得更好的性能,你可能还需要调整学习率、迭代次数、批处理大小等参数。

3.6.4.2.3. DBN的重构函数

实现RBM的重构函数主要涉及到两个步骤:正向传播(编码)和反向传播(解码)。在RBM中,正向传播是将可见层的数据通过激活函数和权重映射到隐藏层,而反向传播则是将隐藏层的激活通过权重和激活函数映射回可见层。

以下是一个简化的RBM重构函数的实现步骤:

  1. 正向传播(编码)
    • 给定可见层的状态 (v),计算隐藏层每个神经元的激活概率。
    • 使用某种随机过程(如Gibbs采样)或确定性方法(如使用sigmoid函数的输出作为激活概率)来设置隐藏层的状态(h)
  2. 反向传播(解码)
    • 使用隐藏层的状态 (h) 和权重矩阵来重构可见层的状态(\tilde{v})
    • 这通常涉及到计算每个可见层神经元的激活概率,并可能再次使用随机过程或确定性方法来设置重构后的可见层状态。

在编码阶段,隐藏层的激活通常使用sigmoid函数来计算,给定可见层 (v)和权重(W) 以及隐藏层的偏置(b),隐藏层神经元的激活概率(p(h_j=1|v))可以计算为:

[ p(h_j=1|v) = \sigma\left( \sum_i W_{ij} v_i + b_j \right) ]

其中 (\sigma)是sigmoid函数。

在解码阶段,重构的可见层 (\tilde{v})可以通过以下方式计算:

[ p(\tilde{v}i=1|h) = \sigma\left( \sum_j W{ij} h_j + c_i \right) ]

其中 (c)是可见层的偏置。

以下是一个简化的伪代码实现:

import numpy as np  
  
def sigmoid(x):  
    return 1 / (1 + np.exp(-x))  
  
class RBM:  
    # 假设RBM类已经初始化了权重W、可见层偏置c和隐藏层偏置b  
      
    def reconstruct(self, v):  
        # 编码:计算隐藏层的激活概率并采样  
        h_prob = sigmoid(np.dot(v, self.W) + self.b)  
        h = (np.random.rand(h_prob.shape[0]) < h_prob).astype(int)  
          
        # 解码:根据隐藏层状态重构可见层  
        v_recon_prob = sigmoid(np.dot(h, self.W.T) + self.c)  
        v_recon = (np.random.rand(v_recon_prob.shape[0]) < v_recon_prob).astype(int)  
          
        return v_recon

这个伪代码使用了随机采样来设置隐藏层和重构后的可见层的状态。在实际应用中,你可能需要根据你的具体需求来调整这个过程,例如,使用确定性方法而不是随机采样。

此外,RBM的训练通常涉及复杂的迭代过程,如对比散度(Contrastive Divergence),在这个过程中,重构函数会被多次调用以进行权重和偏置的更新。这里的重构函数仅展示了如何从给定的可见层状态得到重构的可见层状态,而不涉及训练过程。

3.6.4.3. C++实现方法讨论

深度信念网络(DBN)在C++中的实现相对复杂,特别是如果你选择自行实现或者使用像TinyDNN这样的轻量级库。TinyDNN是一个纯C++实现的、无依赖的深度学习库,它支持前向神经网络,但并没有直接支持深度信念网络(DBN)或受限玻尔兹曼机(RBM)。因此,如果你选择使用TinyDNN,你需要自行实现RBM层及其训练逻辑。

以下是一个简化的示例,展示了如何使用C++和TinyDNN库的基础组件来构建一个类似DBN的结构。

  1. 实现RBM类
    • 定义一个RBM类,包含权重矩阵、偏置向量等参数。
    • 实现RBM的训练算法,如对比散度(Contrastive Divergence, CD)。
    • 实现RBM的重构函数,用于将输入数据通过RBM进行编码和解码。
  2. 构建DBN
    • 创建一个DBN类,该类将包含多个RBM对象。
    • 在DBN类中,实现一个方法来逐层训练RBMs,即无监督的预训练。
  3. 微调DBN
    • 在DBN的顶部添加一个输出层,用于分类或回归任务。
    • 使用TinyDNN的有监督学习功能对整个网络进行微调。
// 伪代码示例,不可直接运行  
  
class RBM {  
    // RBM的实现细节,包括权重、偏置、训练函数等  
};  
  
class DBN {  
private:  
    std::vector<RBM> rbms; // 存储RBM对象的向量  
    // 可以添加TinyDNN的网络结构用于微调  
  
public:  
    DBN(const std::vector<int>& layer_sizes) {  
        // 根据层大小初始化RBMs  
        for (size_t i = 0; i < layer_sizes.size() - 1; ++i) {  
            rbms.emplace_back(layer_sizes[i], layer_sizes[i + 1]);  
        }  
    }  
  
    void pretrain(const std::vector<tiny_dnn::vec_t>& data) {  
        // 对每个RBM进行逐层预训练  
        for (auto& rbm : rbms) {  
            // 训练逻辑,可能需要将数据通过之前的RBM层进行传递  
        }  
    }  
  
    void finetune(const std::vector<tiny_dnn::vec_t>& data, const std::vector<tiny_dnn::label_t>& labels) {  
        // 使用TinyDNN创建顶部的监督学习网络结构  
        // 并将RBM的权重作为初始化参数  
        // 然后使用有标签数据进行微调  
    }  
};

请注意,这个示例主要是为了展示概念,并不是一个完整的DBN实现。

首先,确保你已经安装了TinyDNN库。

#include <tiny_dnn/tiny_dnn.h>  
#include <iostream>  
#include <vector>  
  
// 假设你已经有了一个RBM的实现,这里我们仅声明其接口  
class RBM {  
public:  
    virtual void train(const tiny_dnn::vec_t& input) = 0;  
    virtual tiny_dnn::vec_t reconstruct(const tiny_dnn::vec_t& input) = 0;  
    // ... 其他RBM相关的方法和成员  
};  
  
// 你的具体RBM实现将放在这里  
// ...  
  
class DBN {  
private:  
    std::vector<std::shared_ptr<RBM>> rbm_layers;  
    tiny_dnn::network<tiny_dnn::sequential> nn;  
  
public:  
    DBN(const std::vector<int>& layer_sizes) {  
        // 构建RBM层  
        for (size_t i = 0; i < layer_sizes.size() - 1; ++i) {  
            // 这里你需要用你的RBM实现来替换这个伪代码  
            auto rbm = std::make_shared<RBMImpl>(layer_sizes[i], layer_sizes[i+1]);  
            rbm_layers.push_back(rbm);  
        }  
  
        // 构建顶部的神经网络层(例如,一个softmax分类器)  
        for (size_t i = 1; i < layer_sizes.size(); ++i) {  
            nn << tiny_dnn::fully_connected_layer(layer_sizes[i-1], layer_sizes[i], true, tiny_dnn::activation::tanh)  
               << tiny_dnn::softmax_layer(layer_sizes.back());  
        }  
    }  
  
    void pretrain(const std::vector<tiny_dnn::vec_t>& data) {  
        for (const auto& sample : data) {  
            tiny_dnn::vec_t current = sample;  
            for (const auto& rbm : rbm_layers) {  
                rbm->train(current);  
                current = rbm->reconstruct(current); // 假设reconstruct也执行了CD-k步骤  
            }  
        }  
    }  
  
    void finetune(const std::vector<tiny_dnn::vec_t>& data, const std::vector<tiny_dnn::label_t>& labels) {  
        // 使用TinyDNN进行微调  
        tiny_dnn::adam optimizer;  
        for (size_t i = 0; i < data.size(); ++i) {  
            tiny_dnn::vec_t input = data[i];  
            for (const auto& rbm : rbm_layers) {  
                input = rbm->reconstruct(input); // 通过RBM层进行前向传播  
            }  
            nn.train_once(input, labels[i], optimizer); // 使用顶层的神经网络进行训练  
        }  
    }  
  
    // ... 其他方法,如predict等  
};  
  
int main() {  
    // 示例:创建一个DBN,其中包含两个RBM层和一个softmax输出层  
    DBN dbn({784, 500, 250, 10}); // 假设输入是28x28的图像,有10个类别  
  
    // 加载或生成数据  
    std::vector<tiny_dnn::vec_t> train_data; // 应该包含784维的向量  
    std::vector<tiny_dnn::label_t> train_labels; // 对应的标签  
  
    // 填充train_data和train_labels...  
    // ...  
  
    // 预训练DBN  
    dbn.pretrain(train_data);  
  
    // 微调DBN  
    dbn.finetune(train_data, train_labels);  
  
    return 0;  
}

这个代码示例是一个高级框架,用于说明如何在C++中使用TinyDNN构建一个类似DBN的结构。实际的RBM实现(在RBMImpl类中)需要你自行完成,包括训练、重构等方法的详细逻辑。

由于TinyDNN本身不支持RBM或DBN,因此你需要对神经网络和机器学习有深入的理解,以便正确地实现这些组件。如果你对这些概念还不熟悉,建议先学习相关理论,或者考虑使用更高级的库,如TensorFlow或PyTorch,这些库通常有更多的社区支持和资源。

3.6.5. 优缺点

优点

  • DBN能够通过无监督学习提取数据的深层特征。
  • 适用于未标记数据,具有较强的特征学习能力。
  • 作为生成模型,能够生成新的数据示例。

缺点

  • 训练过程相对复杂,需要分阶段进行。
  • 在某些情况下,可能不如其他深度学习模型(如CNN或RNN)在特定任务上表现优异。

3.6.6.游戏AI中使用该算法的场景、方法

3.6.6.1.概述

在游戏AI中,DBN可以应用于以下场景和方法:

  • 特征学习:DBN可以自动从游戏数据中学习到有意义的特征表示。这些特征可以用于玩家行为分析、游戏内容推荐等任务。
  • 智能生成:利用DBN的生成能力,可以生成新的游戏内容,如关卡设计、角色动作等,为游戏提供丰富的多样性和可玩性。
  • 智能控制:通过训练DBN模型来理解玩家的游戏行为,游戏AI可以更加智能地控制游戏角色或NPC的行为,提高游戏的互动性和趣味性。

在实现上,游戏开发者可以收集游戏数据(如玩家行为日志、游戏截图等),然后使用DBN进行特征学习和模型训练。

训练好的模型可以集成到游戏引擎中,实现智能生成、智能控制等功能。

3.6.6.2. 智能控制游戏AI的算法示例

下面是一个简化的示例,展示如何使用Python和深度学习库(如TensorFlow或Keras,因为TinyDNN对深度学习的支持较为有限)来实现一个DBN,以便理解玩家的游戏行为并据此控制游戏角色或NPC。

请注意,以下代码是一个概念性示例,用于说明如何实现这样的系统,而不是一个即插即用的解决方案哦。(不要试图直接复制粘贴的说,而且训练数据需要专业收集和标注哦)

import numpy as np  
from sklearn.preprocessing import StandardScaler  
from tensorflow.keras.layers import Dense  
from tensorflow.keras.models import Sequential, Model  
from tensorflow.keras.optimizers import Adam  
  
# 假设你已经有了一个RBM类,这里简化为一个占位符  
class RBM:  
    # RBM的实现细节(略)  
    pass  
  
# 假设的游戏行为数据  
# 每行代表一个玩家的游戏行为记录,每列代表不同的行为特征  
game_behaviors = np.random.rand(1000, 20)  
  
# 数据标准化  
scaler = StandardScaler()  
game_behaviors_scaled = scaler.fit_transform(game_behaviors)  
  
# 构建DBN  
class DBN:  
    def __init__(self, layer_sizes):  
        self.rbms = []  
        for i in range(len(layer_sizes) - 1):  
            # 这里简化了RBM的创建和训练过程  
            rbm = RBM(layer_sizes[i], layer_sizes[i+1])  
            self.rbms.append(rbm)  
        self.layer_sizes = layer_sizes  
  
    def pretrain(self, data, epochs):  
        # 逐层预训练RBMs  
        for i, rbm in enumerate(self.rbms):  
            if i == 0:  
                input_data = data  
            else:  
                input_data = self.transform(input_data, through_layer=i-1)  
            # 假设RBM类有train方法  
            rbm.train(input_data, epochs=epochs)  
  
    def transform(self, data, through_layer):  
        # 将数据通过RBM层进行转换  
        for i in range(through_layer + 1):  
            # 假设RBM类有transform方法  
            data = self.rbms[i].transform(data)  
        return data  
  
    def fine_tune(self, input_data, labels):  
        # 微调DBN  
        # 首先,通过RBM层转换输入数据  
        transformed_data = self.transform(input_data, through_layer=len(self.rbms) - 1)  
          
        # 构建一个监督学习模型来进行微调  
        model = Sequential()  
        model.add(Dense(128, activation='relu', input_dim=self.layer_sizes[-1]))  
        model.add(Dense(64, activation='relu'))  
        model.add(Dense(len(np.unique(labels)), activation='softmax'))  
          
        model.compile(optimizer=Adam(), loss='sparse_categorical_crossentropy', metrics=['accuracy'])  
        model.fit(transformed_data, labels, epochs=10, batch_size=32)  
          
        return model  
  
# 创建和预训练DBN  
dbn = DBN([20, 50, 100, 128])  # 假设的层大小  
dbn.pretrain(game_behaviors_scaled, epochs=10)  # 假设的预训练轮数  
  
# 假设你有一些与游戏行为数据对应的标签(例如,玩家的不同策略或行为模式)  
labels = np.random.randint(0, 5, size=1000)  # 假设有5种不同的行为模式  
  
# 微调DBN  
fine_tuned_model = dbn.fine_tune(game_behaviors_scaled, labels)  
  
# 使用微调后的模型来预测新玩家的行为模式  
# 假设 new_game_behaviors 是新玩家的游戏行为数据  
new_game_behaviors = np.random.rand(10, 20)  
new_game_behaviors_scaled = scaler.transform(new_game_behaviors)  
predicted_patterns = fine_tuned_model.predict_classes(dbn.transform(new_game_behaviors_scaled, through_layer=len(dbn.rbms) - 1))  
print("Predicted behavior patterns:", predicted_patterns)

在实际应用中,你需要实现或集成一个功能完整的RBM,包括其训练、重构和转换方法。此外,微调部分的模型结构和参数也可能需要根据具体任务进行调整。

下一篇,将迎来深度学习的重头戏Transformer~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/746212.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人大金仓×深信服:打造高性能、高可靠教育信创数据库一体机解决方案

信息技术应用创新是数字经济发展的关键支撑和重要基石&#xff0c;近年来&#xff0c;国家高度重视信息技术应用创新产业发展。教育行业作为我国人才培养的发动机&#xff0c;发展教育信创是保持信创创新力、是提升信创人才质量的重要举措、是保障信创产业可持续发展的关键环节…

某平台小程序逆向思路整理

一、下载软件 devtools 二、强制打开控制台 根据返回的数据我们得知数据被加密了 找到这个加密的js 发现加密的位置 打断点进入这个加密的方法 之后自定义js。python调用解密即可。

web渗透-SSRF漏洞及discuz论坛网站测试

一、简介 ssrf(server-side request forgery:服务器端请求伪造&#xff09;是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下&#xff0c;ssrf是要目标网站的内部系统。(因为他是从内部系统访问的&#xff0c;所有可以通过它攻击外网无法访问的内部系统&…

js+php 上传文件到服务器

https://andi.cn/page/621473.html

Navicat Premium Lite绿色免费版

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Navicat Premium Lite概述 Navicat 最近推出了一款名为 Navicat Premium Lite 的免费数据库管理开发工具&#xff0c;专为入门级用户设计。这款工具虽然在功能上与 Navicat…

转让北京资产评估公司变更需要什么条件和要求

北京资产评估公司是有限责任公司。因为有限责任公司具有人合属性&#xff0c;股东的个人信用及相互关系直接影响到公司的风格甚至信誉&#xff0c;所以各国公司法对有限责任公司股东向公司外第三人的转让股权&#xff0c;多有限制性规定。大致可分为法定限制和约定限制两类。公…

Centos7虚拟机

Centos 7 安装 1 镜像下载1.1 官网下载1.2 阿里云镜像下载 2 环境的安装2.1 打开我们的虚拟机&#xff0c;点击文件进行新建2.2 选择典型之后&#xff0c;下一步2.3 选择稍会安装操作系统2.4 勾选Linux&#xff0c;并且选择CentOS 7的版本2.5 设定我们虚拟机的名称和安装位置2.…

python实现可视化大屏(django+pyechars)

1.实现效果图 2.对数据库进行迁移 python manage.py makemigrations python manage.py migrate 3.登录页面 {% load static%} <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport"…

文件管理器加载缓慢-禁用文件类型自动发现功能

文件管理器加载缓慢-禁用文件类型自动发现功能 右键“Shell”项&#xff0c;选择新建“字符串值” “FolderType”&#xff0c;数值为 NotSpecified。

文字实录|Checkout.com大中华区总经理项尧:品牌全球化发展中的支付运营策略

大家好&#xff0c;很高兴在此次【品牌全球化营销增长峰会】与大家一起分享和交流。 我叫项尧&#xff0c;是 Checkout.com 大中华区的总经理&#xff0c;在支付领域有将近15年的经验。 我们 Checkout.com 是一家总部位于英国的支付公司&#xff0c;专注于线上收单&#xff0…

旧衣回收小程序开发:回收市场的新机遇

当下&#xff0c;旧衣服回收已经成为了一种流行趋势&#xff0c;居民都将闲置的衣物进行回收&#xff0c;旧衣回收市场规模在不断增加。随着市场规模的扩大&#xff0c;为了让居民更加便利地进行回收&#xff0c;线上回收小程序也应运而生&#xff0c;为大众打造了一个线上回收…

程序员学长 | 快速学会一个算法,RNN

本文来源公众号“程序员学长”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;快速学会一个算法&#xff0c;RNN 今天给大家分享一个超强的算法模型&#xff0c;RNN 循环神经网络&#xff08;Recurrent Neural Network, RNN&…

新改进!LSTM与注意力机制结合,性能一整个拿捏住

众所周知&#xff0c;LSTM并不能很好地处理长序列和重要信息的突出&#xff0c;这导致在某些情况下性能不佳。而注意力机制模拟人类视觉注意力机制的特点可以很好地解决这个问题。 说具体点就是&#xff0c;注意力机制通过权重分布来决定应该关注输入序列中的哪些部分&#xf…

完整代码Python爬取豆瓣电影详情数据

完整代码Python爬取豆瓣电影详情数据 引言 在数据科学和网络爬虫的世界里&#xff0c;豆瓣电影是一个丰富的数据源。在本文中&#xff0c;我们将探讨如何使用Python语言&#xff0c;结合requests和pyquery库来爬取豆瓣电影的详情页面数据。我们将通过一个具体的电影详情页面作…

3d渲染软件有哪些(2),渲染100邀请码1a12

3D渲染软件有很多&#xff0c;上次我们介绍了几个&#xff0c;这次我们接着介绍。 1、Arnold Arnold渲染器是一款基于物理算法的电影级渲染引擎&#xff0c;它具有渲染质量高、材质系统丰富、渲染速度快等特点&#xff0c;是3D设计师的极佳选择。2、Octane Render Octane Ren…

云3D渲染:深度剖析技术原理、优势及其在各行业的广泛应用

云3D渲染技术&#xff0c;在数字化转型的大潮中&#xff0c;以其显著的优势和广阔的应用潜力&#xff0c;正在深刻地重塑多个行业的未来。它不仅为电影特效、建筑设计、游戏开发和虚拟现实等领域注入了前所未有的视觉震撼&#xff0c;还促进了创意思维与前沿技术的紧密结合&…

【编译原理】总览

1 字母表 字母表&#xff1a; 用∑表示&#xff0c;它是一个有穷符号集合 符号&#xff1a;字母、数字、标点符号... 例如&#xff1a;二进制字母表为{0&#xff0c;1}&#xff0c;ASCII字符集 2 字母表的运算 字母表上的乘积&#xff1a; ∑1∑2{ab | a属于∑1&#xff0c;b…

气流流型烟雾模型研究相关法规要求及拍摄注意事项

气流模式可视化提供制药设施中实际气流模型的视觉记录。它是目前最广泛接受的、证明关键工艺区域的气流模型满足监管期望的方法。此外&#xff0c;气流模型可视化允许多个职能组织发现气流设计和功能的有效性和意义&#xff0c;特别是在关键领域。 与气流模型相关的法规指南要求…

数据处理神器Elasticsearch_Pipeline:原理、配置与实战指南

文章目录 &#x1f4d1;引言一、Elasticsearch Pipeline的原理二、Elasticsearch Pipeline的使用2.1 创建 Pipeline2.2 使用 Pipeline 进行索引2.3 常用的 Processor 三、实际应用场景3.1 日志数据处理3.2 数据清洗和标准化3.3 数据增强 四、最佳实践4.1 性能优化4.2 错误处理4…

晶方科技:台积电吃饱,封装迎春?

半导体产业链掀起涨价潮&#xff0c;先进封装迎接利好。 这里我们来聊国内先进封装企业——晶方科技。 近期&#xff0c;由于产能供不应求&#xff0c;台积电决定上调先进封装产品价格&#xff0c;还表示订单已经排到2026年。 大哥吃不下了&#xff0c;剩下的订单全都是空间。…