当前位置: 首页 > news >正文

TensorFlow学习之:高级应用和扩展

生成对抗网络:了解GAN的基本原理,使用TensorFlow实现简单的GAN

生成对抗网络(Generative Adversarial Networks,GAN)由两部分组成:生成器(Generator)和判别器(Discriminator)。它们是一种深度学习模型,特别用于生成数据。GAN的基本思想是通过让生成器和判别器相互竞争,不断提高生成数据的质量。

GAN的工作原理

  • 生成器(Generator):尝试生成尽可能接近真实数据的假数据。它接收随机噪声作为输入,输出生成的数据。
  • 判别器(Discriminator):尝试区分输入数据是真实数据还是由生成器生成的假数据。它接收真实数据或生成的数据作为输入,输出一个判断结果。

训练过程

GAN的训练过程是一个博弈过程,其中生成器和判别器互相竞争:

  1. 训练判别器:用真实数据和生成器生成的假数据训练判别器,目标是最大化判别器对真实和假数据的识别能力。
  2. 训练生成器:固定判别器,只更新生成器的参数,目标是最小化判别器正确识别生成数据的能力(即欺骗判别器让其认为生成数据是真实的)。

这个过程反复进行,直到生成器生成的数据足够好,判别器难以区分真假数据。

使用TensorFlow实现简单的GAN

以下是使用TensorFlow实现一个简单GAN的示例:

步骤 1: 定义模型

首先,定义生成器和判别器模型。

from tensorflow.keras import layers, modelsdef make_generator_model():model = tf.keras.Sequential([layers.Dense(256, use_bias=False, input_shape=(100,)),layers.BatchNormalization(),layers.LeakyReLU(),layers.Dense(512, use_bias=False),layers.BatchNormalization(),layers.LeakyReLU(),layers.Dense(28*28*1, use_bias=False, activation='tanh'),layers.Reshape((28, 28, 1))])return modeldef make_discriminator_model():model = tf.keras.Sequential([layers.Flatten(input_shape=(28, 28, 1)),layers.Dense(512, use_bias=False),layers.LeakyReLU(),layers.Dense(256, use_bias=False),layers.LeakyReLU(),layers.Dense(1, activation='sigmoid')])return model
步骤 2: 定义损失函数和优化器
# 生成器和判别器的损失函数
cross_entropy = tf.keras.losses.BinaryCrossentropy(from_logits=True)def discriminator_loss(real_output, fake_output):real_loss = cross_entropy(tf.ones_like(real_output), real_output)fake_loss = cross_entropy(tf.zeros_like(fake_output), fake_output)total_loss = real_loss + fake_lossreturn total_lossdef generator_loss(fake_output):return cross_entropy(tf.ones_like(fake_output), fake_output)# 优化器
generator_optimizer = tf.keras.optimizers.Adam(1e-4)
discriminator_optimizer = tf.keras.optimizers.Adam(1e-4)
步骤 3: 训练循环

训练循环涉及到交替训练生成器和判别器。在实践中,这通常通过定义一个训练步骤函数,然后在一个循环中调用该函数来实现。

@tf.function
def train_step(images):noise = tf.random.normal([batch_size, noise_dim])with tf.GradientTape() as gen_tape, tf.GradientTape() as disc_tape:generated_images = generator(noise, training=True)real_output = discriminator(images, training=True)fake_output = discriminator(generated_images, training=True)gen_loss = generator_loss(fake_output)disc_loss = discriminator_loss(real_output, fake_output)gradients_of_generator = gen_tape.gradient(gen_loss, generator.trainable_variables)gradients_of_discriminator = disc_tape.gradient(disc_loss, discriminator.trainable_variables)generator_optimizer.apply_gradients(zip(gradients_of_generator, generator.trainable_variables))discriminator_optimizer.apply_gradients(zip(gradients_of_discriminator, discriminator.trainable_variables))

这只是一个简化的示例,完整的GAN实现需要更多的细节处理,例如定期保存模型、监控训练过程、调整模型架构等。GAN的训练是挑战性的,可能需要多次尝试和调整才能获得满意的结果。

总结

GAN是一种强大的生成模型,能够生成逼真的图像、音频和文本数据。虽然GAN的训练可能比较复杂且需要精心设计,但它们在艺术创作、数据增强、无监督学习等领域展现出了巨大的潜力。通过理解GAN的基本原理并利用TensorFlow等深度学习框架,你可以开始探索生成对抗网络的魅力世界。

强化学习:介绍强化学习的基本概念和算法,探索如何使用TensorFlow Agents库

强化学习(Reinforcement Learning, RL)是机器学习的一个分支,它关注的是智能体(agent)如何在环境(environment)中采取行动,以最大化某种累积奖励。与监督学习和无监督学习不同,强化学习主要关注在不完全已知的环境中进行决策和学习。

强化学习的基本概念

  • 智能体(Agent):在环境中进行探索和学习的实体。
  • 环境(Environment):智能体进行探索的外部世界。
  • 状态(State):环境在某一时刻的具体情况。
  • 动作(Action):智能体在给定状态下可以采取的行动。
  • 奖励(Reward):智能体采取动作后环境给予的反馈,是一个标量信号。
  • 策略(Policy):智能体采取动作的策略,通常是从状态到动作的映射。

强化学习的关键问题

强化学习的核心是如何学习一个好的策略,使得智能体能够在环境中获得最大的累积奖励。这通常涉及到两个关键问题:

  • 探索(Exploration):智能体需要探索未知的环境,以了解更多信息。
  • 利用(Exploitation):智能体需要利用已知信息做出最优决策。

强化学习的基本算法

强化学习算法通常可以分为三类:基于值的方法(Value-Based)、基于策略的方法(Policy-Based)和模型驱动的方法(Model-Based)。

  • 基于值的方法:如Q学习(Q-Learning)和深度Q网络(DQN)。这类方法通过估计每个状态或状态-动作对的价值来确定最佳策略。
  • 基于策略的方法:如策略梯度(Policy Gradient)和优势Actor-Critic(A2C)。这类方法直接学习策略函数,而不是价值函数。
  • 模型驱动的方法:这类方法尝试建立一个环境的模型,智能体可以通过与该模型的交互来学习策略。

TensorFlow Agents库

TensorFlow Agents(TF-Agents)是一个基于TensorFlow的强化学习库,提供了实现和训练强化学习算法的高级API。TF-Agents简化了编写强化学习算法的过程,并提供了多种算法的实现,如DQN、DDPG(深度确定性策略梯度)、TD3(Twin Delayed DDPG)等。

安装TF-Agents

你可以通过pip来安装TF-Agents:

pip install tf-agents
使用TF-Agents

使用TF-Agents可以分为几个步骤:定义环境、定义智能体、训练和评估。

import tf_agents# 定义环境
env = ...# 定义智能体
agent = ...# 训练智能体
...# 评估智能体
...

总结

强化学习提供了一种强大的框架,用于解决需要序列决策的问题。通过智能体与环境的交互学习策略,强化学习在游戏、机器人、自动驾驶等领域展示了巨大的潜力。TensorFlow Agents作为强化学习的高级库,大大简化了强化学习算法的实现和试验过程,是学习和研究强化学习的有力工具。

TensorFlow生态系统:了解TensorFlow Extended (TFX)、TensorBoard等工具

TensorFlow生态系统由一系列工具和库组成,这些工具和库为深度学习模型的开发、训练、评估、部署以及监控提供了全面的支持。其中,TensorFlow Extended (TFX) 和 TensorBoard 是两个非常重要的组成部分。

TensorFlow Extended (TFX)

TensorFlow Extended (TFX) 是一个用于部署生产级机器学习管道的平台。它提供了一套组件和库,使研究者和工程师能够在大规模数据集上训练、验证、部署和监控他们的模型。

主要特点
  • 端到端的机器学习管道:TFX 支持数据准备、模型训练、模型评估、模型验证、部署以及模型监控的全过程。
  • 数据验证:使用 TFX,你可以验证你的输入数据和模型的输出数据,确保模型训练和预测的质量。
  • 模型验证:TFX 提供了模型验证工具(如 TensorFlow Model Analysis 和 TensorFlow Data Validation),帮助你评估和比较不同模型的性能。
  • 管道自动化和监控:TFX 支持通过 Apache Airflow、Kubeflow Pipelines 等工具实现机器学习管道的自动化,并通过TensorBoard等工具进行监控。
使用场景

TFX 被设计用于生产环境中的机器学习项目,特别适用于需要处理大规模数据集、需要频繁更新模型或需要严格模型质量保证的场景。

TensorBoard

TensorBoard 是 TensorFlow 的可视化工具,它使得理解、调试和优化机器学习程序变得更加容易。

主要特点
  • 实时监控:TensorBoard 可以实时显示模型训练过程中的指标变化,如损失和准确率。
  • 模型结构可视化:它可以帮助你理解模型的架构,并检查模型中的权重和偏置。
  • 参数分布:TensorBoard 显示了训练过程中参数的分布和变化,帮助你分析模型的训练过程。
  • 嵌入向量:它提供了嵌入向量的可视化工具,可以用于分析高维数据的低维表示。
使用场景

TensorBoard 适用于所有使用 TensorFlow 进行开发的项目。它是理解和调试模型的有力工具,尤其在模型训练过程中监控模型表现时非常有效。

总结

TensorFlow生态系统提供了一系列工具和库,从模型开发到部署再到监控,为机器学习项目的整个生命周期提供支持。TFX 和 TensorBoard 是其中的重要组成部分,分别针对生产级机器学习管道的实施和模型训练过程的可视化提供了强大的支持。掌握这些工具将有助于提高你的机器学习项目的开发效率和模型质量。

项目实践

使用GAN生成图像

使用生成对抗网络(GAN)生成图像是一个非常有趣且富有挑战性的项目。这个项目将引导你了解GAN的基本概念,并使用TensorFlow实现一个简单的GAN来生成新的图像。我们将以一个生成手写数字图像的项目为例,使用MNIST数据集作为训练数据。

项目概述

目标:构建并训练一个GAN模型,以生成看起来像手写数字的新图像。

步骤 1: 准备环境和数据

首先,导入必要的库并准备数据集。

import tensorflow as tf
from tensorflow.keras import layers
import matplotlib.pyplot as plt
import numpy as np# 加载MNIST数据集
(train_images, _), (_, _) = tf.keras.datasets.mnist.load_data()
train_images = train_images.reshape(train_images.shape[0], 28, 28, 1).astype('float32')
train_images = (train_images - 127.5) / 127.5  # 将图像标准化到[-1, 1]
步骤 2: 构建模型
生成器

生成器将噪声作为输入,生成图像数据。

 
def make_generator_model():model = tf.keras.Sequential([layers.Dense(7*7*256, use_bias=False, input_shape=(100,)),layers.BatchNormalization(),layers.LeakyReLU(),layers.Reshape((7, 7, 256)),layers.Conv2DTranspose(128, (5, 5), strides=(1, 1), padding='same', use_bias=False),layers.BatchNormalization(),layers.LeakyReLU(),layers.Conv2DTranspose(64, (5, 5), strides=(2, 2), padding='same', use_bias=False),layers.BatchNormalization(),layers.LeakyReLU(),layers.Conv2DTranspose(1, (5, 5), strides=(2, 2), padding='same', use_bias=False, activation='tanh')])return model

判别器

判别器是一个基于CNN的图像分类器,将真实图像和生成图像分开。

def make_discriminator_model():model = tf.keras.Sequential([layers.Conv2D(64, (5, 5), strides=(2, 2), padding='same', input_shape=[28, 28, 1]),layers.LeakyReLU(),layers.Dropout(0.3),layers.Conv2D(128, (5, 5), strides=(2, 2), padding='same'),layers.LeakyReLU(),layers.Dropout(0.3),layers.Flatten(),layers.Dense(1)])return model

步骤 3: 定义损失函数和优化器
cross_entropy = tf.keras.losses.BinaryCrossentropy(from_logits=True)def discriminator_loss(real_output, fake_output):real_loss = cross_entropy(tf.ones_like(real_output), real_output)fake_loss = cross_entropy(tf.zeros_like(fake_output), fake_output)return real_loss + fake_lossdef generator_loss(fake_output):return cross_entropy(tf.ones_like(fake_output), fake_output)generator_optimizer = tf.keras.optimizers.Adam(1e-4)
discriminator_optimizer = tf.keras.optimizers.Adam(1e-4)

步骤 4: 训练模型

训练GAN涉及到反复迭代训练生成器和判别器。简化的训练循环如下所示(这里仅为示例,实际项目需要更详细的实现):

 
EPOCHS = 50
noise_dim = 100
num_examples_to_generate = 16seed = tf.random.normal([num_examples_to_generate, noise_dim])# 训练步骤
@tf.function
def train_step(images):noise = tf.random.normal([BATCH_SIZE, noise_dim])with tf.GradientTape() as gen_tape, tf.GradientTape() as disc_tape:generated_images = generator(noise, training=True)real_output = discriminator(images, training=True)fake_output = discriminator(generated_images, training=True)gen_loss = generator_loss(fake_output)disc_loss = discriminator_loss(real_output, fake_output)gradients_of_generator = gen_tape.gradient(gen_loss, generator.trainable_variables)gradients_of_discriminator = disc_tape.gradient(disc_loss, discriminator.trainable_variables)generator_optimizer.apply_gradients(zip(gradients_of_generator, generator.trainable_variables))discriminator_optimizer.apply_gradients(zip(gradients_of_discriminator, discriminator.trainable_variables))

步骤 5: 生成和可视化结果

训练完成后,你可以使用生成器生成新的图像,并使用matplotlib将结果可视化。

def generate_and_save_images(model, epoch, test_input):predictions = model(test_input, training=False)fig = plt.figure(figsize=(4,4))for i in range(predictions.shape[0]):plt.subplot(4, 4, i+1)plt.imshow(predictions[i, :, :, 0] * 127.5 + 127.5, cmap='gray')plt.axis('off')plt.savefig('image_at_epoch_{:04d}.png'.format(epoch))plt.show()

在每个epoch结束后调用generate_and_save_images函数可以看到训练过程中生成器输出的进展。

总结

通过这个项目,你可以了解到使用TensorFlow实现GAN的基本流程,包括准备数据、构建模型、定义损失函数和优化器、训练模型以及生成和可视化结果。GAN的训练是挑战性的,需要耐心调整参数。成功训练的GAN可以生成逼真的图像,这在艺术创作、游戏开发、数据增强等领域有着广泛的应用。

简单的游戏AI(如使用强化学习在OpenAI Gym环境中训练智能体)

强化学习是一种使智能体(agent)能够在环境(environment)中采取行动,通过试错来学习策略,以达到最大化累积奖励的机器学习方法。OpenAI Gym提供了一个简单的接口来构建和测试智能体在各种环境下的表现,是进行强化学习实验的理想平台。接下来,我们将介绍如何使用TensorFlow和OpenAI Gym来实现一个简单的游戏AI。

步骤 1: 安装OpenAI Gym

首先,你需要安装OpenAI Gym。你可以通过pip直接安装:

pip install gym

步骤 2: 选择一个环境

OpenAI Gym提供了多种环境,从简单的文本环境到复杂的3D可视化环境。作为开始,我们选择一个相对简单的环境——CartPole。在CartPole环境中,智能体的任务是通过移动一个沿着轨道运动的小车来平衡一个立在小车上的杆,使杆尽可能长时间地保持直立。

import gym
env = gym.make('CartPole-v1')

步骤 3: 实现智能体

接下来,我们使用TensorFlow来实现一个简单的智能体。这里,我们使用一个非常基础的策略梯度方法作为示例。

 
import tensorflow as tf
from tensorflow.keras import layers, models# 创建一个简单的模型
model = models.Sequential([layers.Dense(24, activation='relu', input_shape=(4,)),layers.Dense(24, activation='relu'),layers.Dense(2, activation='softmax')
])optimizer = tf.keras.optimizers.Adam(lr=0.01)
compute_loss = tf.keras.losses.SparseCategoricalCrossentropy()

这个模型接收环境的观察(observation)作为输入,输出两个动作(左移或右移)的概率。

步骤 4: 训练智能体

训练智能体涉及到智能体在环境中采取行动,并根据行动的结果(奖励)来更新模型。

def train(env, episodes=1000):for episode in range(episodes):observation = env.reset()with tf.GradientTape() as tape:for t in range(1, 10000):  # 最多运行10000步env.render()observation = observation.reshape([1, 4])action_probs = model(observation, training=True)action = np.random.choice(2, p=np.squeeze(action_probs))next_observation, reward, done, info = env.step(action)if done:breakobservation = next_observationloss = compute_loss([action], action_probs)grads = tape.gradient(loss, model.trainable_variables)optimizer.apply_gradients(zip(grads, model.trainable_variables))if episode % 100 == 0:print(f"Episode: {episode}, Time: {t}")train(env)

在这个非常基础的实现中,智能体试图最大化它在环境中生存的时间。env.step(action)返回新的观察、奖励、一个表示是否结束的布尔值,以及额外的信息。

步骤 5: 观察结果

训练完成后,你可以观察智能体在环境中的表现。理想情况下,随着训练的进行,智能体应该能够越来越好地平衡杆。

总结

通过这个简单的项目实践,你可以了解到使用强化学习和OpenAI Gym进行游戏AI开发的基本流程。虽然这里展示的策略梯度方法非常基础,但它是理解更复杂强化学习算法(如深度Q网络(DQN)、优势Actor-Critic(A2C)等)的良好起点。强化学习是一个深度学习领域中非常活跃的研究领域,它在游戏、机器人技术、自动驾驶汽车等多个领域展现出了巨大的应用潜力。

相关文章:

TensorFlow学习之:高级应用和扩展

生成对抗网络:了解GAN的基本原理,使用TensorFlow实现简单的GAN 生成对抗网络(Generative Adversarial Networks,GAN)由两部分组成:生成器(Generator)和判别器(Discrimin…...

maya模板导入动画

maya模板导入动画,第一帧为模板姿态 要将一个FBX文件中的动画数据导入另一个FBX文件的模板,并使得第一帧是模板的初始姿势,第二帧开始是动画,你可以在Maya中采用以下步骤来操作: 步骤 1: 导入模板FBX 首先&#xff…...

【微信小程序之分包】

微信小程序之分包 什么是分包分包的好处分包前的结构图分包后的结构图分包的加载规则分包的体积限制使用分包打包原则引用原则独立分包独立分包的配置方法独立分包的引用原则分包预下载配置分包的预下载分包预下载限制 什么是分包 分包指的是把一个完整小程序项目,…...

STM32-ADC(独立模式、双重模式)

ADC简介 18个通道:外部信号源就是16个GPIO回。在引脚上直接接模拟信号就行了,不需要侄何额外的电路。引脚就直接能测电压。2个内部信号源是内部温度传感器和内部参考电压。 逐次逼近型ADC: 它是一个独立的8位逐次逼近型ADC芯片,这个ADC0809是…...

03.卸载MySQL

卸载MySQL 1.Windows卸载MySQL8 停止服务 用命令停止或者在服务中停止都可以 net stop mysql(服务名字可以去服务里面看一下)控制面板卸载MySQL 卸载MySQL8.0的程序可以和其他桌面应用程序一样直接在控制面板选择卸载程序,并在程序列表中…...

2024.4.13 蓝桥杯软件类C++B组山东省赛 小记

大三老狗了 , 还是把精力放在考研上了 ,所以只是蓝桥杯的前一晚上把常用算法翻了翻。 其实还做了一场小模拟,两个题分值200分我狂砍了17分,bfs写半小时写不明白,所以晚上已经是心如死灰了,所以就早早睡觉了…...

Windows下IntelliJ IDEA远程连接服务器中Hadoop运行WordCount(详细版)

使用IDEA直接运行Hadoop项目,有两种方式,分别是本地式:本地安装HadoopIDEA;远程式:远程部署Hadoop,本地安装IDEA并连接, 本文介绍第二种。 一、安装配置Hadoop (1)虚拟机伪分布式 见上才艺&a…...

【每日刷题】Day16

【每日刷题】Day16 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 24. 两两交换链表中的节点 - 力扣(LeetCode) 2. 160. 相交链表 - 力扣&…...

【K8s】:在 Kubernetes 集群中部署 MySQL8.0 高可用集群(1主2从)

【K8s】:在 Kubernetes 集群中部署 MySQL8.0 高可用集群(1主2从) 一、准备工作二、搭建nfs服务器2.1 安装 NFS 服务器软件包(所有节点执行)2.2 设置共享目录2.3 启动 NFS 服务器2.4 设置防火墙规则(可选&am…...

Vue内置组件TransitionGroup详细介绍

<TransitionGroup> 是一个内置组件&#xff0c;用于对 v-for 列表中的元素或组件的插入、移除和顺序改变添加动画效果。 和 <Transition> 的区别​ <TransitionGroup> 支持和 <Transition> 基本相同的 props、CSS 过渡 class 和 JavaScript 钩子监听器…...

【机器学习300问】71、神经网络中前向传播和反向传播是什么?

我之前写了一篇有关计算图如何帮助人们理解反向传播的文章&#xff0c;那为什么我还要写这篇文章呢&#xff1f;是因为我又学习了一个新的方法来可视化前向传播和反向传播&#xff0c;我想把两种方法总结在一起&#xff0c;方便我自己后续的复习。对了顺便附上往期文章的链接方…...

【ZZULIOJ】1067: 有问题的里程表(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy 提示 code 题目描述 某辆汽车有一个里程表&#xff0c;该里程表可以显示一个整数&#xff0c;为该车走过的公里数。然而这个里程表有个毛病&#xff1a;它总是从3变到5&#xff0c;而跳过数字4&#xff0c;里程表…...

A21 STM32_HAL库函数 之 I2c通用驱动程序 -- B -- 所有函数的介绍及使用

A21 STM32_HAL库函数 之 I2c通用驱动程序 -- B -- 所有函数的介绍及使用 1 该驱动函数预览1.12 HAL_I2C_Master_Sequential_Receive_IT1.13 HAL_I2C_Slave_Transmit_IT1.14 HAL_I2C_Slave_Receive_IT1.15 HAL_I2C_Slave_Sequential_Transmit_IT1.16 HAL_I2C_Slave_Sequential_R…...

简介:Asp.Net Core进阶高级编程教程

课程简介目录 &#x1f680;前言一、课程背景二、课程目的三、课程特点四、课程适合人员六、最后 &#x1f680;前言 本文是《.Net Core进阶编程课程》教程专栏的导航站&#xff08;点击链接&#xff0c;跳转到专栏主页&#xff0c;欢迎订阅&#xff0c;持续更新…&#xff09…...

Linux系统中LVM与磁盘配额

目录 一、LVM逻辑卷管理 二、LVM的管理命令 物理卷管理 卷组管理 逻辑卷管理 *创建并使用LVM步骤 三、磁盘配额概述 实现磁盘限额的条件 Linux 磁盘限额的特点 四、磁盘配额管理 磁盘限额 一、LVM逻辑卷管理 能够在保持现有数据不变的情况下动态调整磁盘容量&#…...

手机重启手app没了

发现公司有些Android球机设备&#xff0c;安装了一些app&#xff0c;重启后app没了&#xff0c;还有公司的一些Android手机&#xff0c;原来是没问题的&#xff0c;不知道哪天起&#xff0c;只要重启&#xff0c;新安装的软件就会没了&#xff0c;很神奇。后来发现&#xff0c;…...

github上传代码

偷一下懒&#xff0c;把链接贴一下&#xff0c;后续再补充。 1.下载Git 【学习笔记】上传代码到GitHub&#xff08;保姆级教程&#xff09; 2.如何创建GitHub仓库 手把手教你在github上传文件 3.如何删掉GitHub仓库 github如何删除仓库或项目&#xff1f; 4.遇到的错误 …...

Qt+vstudio2022的报错信息积累

从今天开始记录一下平常开发工作中的报错记录&#xff0c;后续有错误动态补充&#xff01; 报错信息&#xff1a;【MSB8041】此项目需要 MFC 库。从 Visual Studio 安装程序(单个组件选项卡)为正在使用的任何工具集和体系结构安装它们。 解决&#xff1a; 背景&#xff1a;换…...

力扣练习题(2024/4/16)

1买卖股票的最佳时机 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔…...

c++中一些常用库函数

1.最大公约数 需要包括头文件#include<algorithm>,直接写__gcd(a,b),就是求a与b的最大公约数。 #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<queue> #include<stack> #include<map>…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

ui框架-文件列表展示

ui框架-文件列表展示 介绍 UI框架的文件列表展示组件&#xff0c;可以展示文件夹&#xff0c;支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项&#xff0c;适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...

uni-app学习笔记三十五--扩展组件的安装和使用

由于内置组件不能满足日常开发需要&#xff0c;uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件&#xff0c;需要安装才能使用。 一、安装扩展插件 安装方法&#xff1a; 1.访问uniapp官方文档组件部分&#xff1a;组件使用的入门教程 | uni-app官网 点击左侧…...