TensorBoard最全使用教程:看这篇就够了
bigegpt 2025-06-23 14:58 3 浏览
机器学习通常涉及在训练期间可视化和度量模型的性能。 有许多工具可用于此任务。 在本文中,我们将重点介绍 TensorFlow 的开源工具套件,称为 TensorBoard,虽然他是TensorFlow 的一部分,但是可以独立安装,并且服务于Pytorch等其他的框架。
什么是 TensorBoard?
TensorBoard 是一组用于数据可视化的工具。它包含在流行的开源机器学习库 Tensorflow 中。TensorBoard 的主要功能包括:
- 可视化模型的网络架构
- 跟踪模型指标,如损失和准确性等
- 检查机器学习工作流程中权重、偏差和其他组件的直方图
- 显示非表格数据,包括图像、文本和音频
- 将高维嵌入投影到低维空间
TensorBoard算是包含在 TensorFlow中的一个子服务。 TensorFlow 库是一个专门为机器学习应用程序设计的开源库。 Google Brain 于 2011 年构建了较早的 DistBelief 系统。随着其用户群的快速增长,它被简化并重构为我们现在称为 Tensorflow 的库。 TensorFlow 随后于 2015 年向公众发布。TensorBoard刚出现时只能用于检查TensorFlow的指标和TensorFlow模型的可视化,但是后来经过多方的努力其他深度学习框架也可以使用TensorBoard的功能,例如Pytorch已经抛弃了自家的visdom(听到过这个名字的人应该都不多了吧)而全面支持TensorBoard。
如何安装 TensorBoard
TensorBoard 包含在 TensorFlow 库中,所以如果我们成功安装了 TensorFlow,我们也可以使用 TensorBoard。 要单独安装 TensorBoard 可以使用如下命令:
pip install tensorboard
需要注意的是:因为TensorBoard 依赖Tensorflow ,所以会自动安装Tensorflow的最新版
启动 TensorBoard
1、本地启动TensorBoard
要启动 TensorBoard,打开终端或命令提示符并运行:
tensorboard --logdir=<directory_name>
将 directory_name 标记替换为保存数据的目录。 默认是“logs”。
运行此命令后,我们将看到以下提示:
Serving TensorBoard on localhost; to expose to the network, use a proxy or pass –bind_allTensorBoard 2.2.0 at http://localhost:6006/ (Press CTRL+C to quit)
这说明 TensorBoard 已经成功上线。 我们可以用浏览器打开http://localhost:6006/查看。
当页面第一次打开时,我们将看到如下内容:
2、在 Jupyter Notebooks 中使用 TensorBoard
如果想在 Jupyter Notebooks 中使用 TensorBoard,可以使用以下命令:
%load_ext tensorboard
运行这行代码将加载 TensorBoard并允许我们将其用于可视化。 加载扩展后,我们现在可以启动 TensorBoard:
%tensorboard --logdir logs
3、将 TensorBoard 与 Google Colab 一起使用
使用 Google Colab 时,一旦创建一个新的 notebook,TensorFlow 和 TensorBoard 就已经安装好了。 要运行它,我们可以遵循与 Jupyter Notebooks 概述的相同过程。 只需在笔记本单元格中输入以下内容:
%load_ext tensorboard
我们会看到 TensorBoard 应用程序。
使用TensorBoard
我们已经启动并运行 TensorBoard,下面以TensorFlow 为例介绍如何使用TensorBoard
1、本地使用 TensorBoard
TensorBoard callback 在 TensorFlow 库提供的回调。 它是如何工作的?
根据 Keras 文档,回调是可以在训练的各个阶段执行操作的对象。 当我们想在训练过程中的特定时间节点(例如,在每次epoch/batch之后)自动执行任务时,我们都可以使用回调。
如何使用 TensorBoard callback 的快速示例。
首先,使用 TensorFlow 创建一个简单的模型,并在 MNIST 数据集上对其进行训练。
import tensorflow as tf
# Load and normalize MNIST data
mnist_data = tf.keras.datasets.mnist
(X_train, y_train), (X_test, y_test) = mnist_data.load_data()
X_train, X_test = X_train / 255.0, X_test / 255.0
# Define the model
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])
# Compile the model
model.compile(
optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
编译模型后,我们需要创建一个回调并在调用 fit 方法时使用。
tf_callback = tf.keras.callbacks.TensorBoard(log_dir="./logs")
现在可以在模型上调用 fit 方法时将回调作为参数传入。 在工作目录中创建了 logs 文件夹,并将其作为参数传递给 log_dir。 下面调用 fit 并将其作为回调传入。
model.fit(X_train, y_train, epochs=5, callbacks=[tf_callback])
调用fit方法后,进入localhost:6006查看结果。
我们看到了一个两个不同的图表。 第一个显示了模型在每个epoch的准确性。 第二个显示的损失。
2、远程运行 TensorBoard
除了在本地运行之外,还可以远程运行 TensorBoard。 如果我们在具有更强大 GPU 的不同服务器之间进行并行训练,也可以本地检查结果。
首先, 使用SSH 并将远程服务器的端口映射到本地的计算机。
ssh -L 6006:127.0.0.1:6006 username@server_ip
然后只需要在远程服务器上启动 TensorBoard。 在远程服务器上运行:
tensorboard --logdir=’logs’ --port=6006
我们可以访问 localhost:6006 来查看远程的TensorBoard。
TensorBoard 仪表板
TensorBoard 仪表板由用于可视化数据的不同组件组成。 我们将深入研究每一个组件。
1、TensorBoard Scalars
机器学习过程需要跟踪与模型性能相关的不同指标。这对于快速发现问题并确定模型是否过度拟合等非常重要。
使用 TensorBoard 的 Scalars Dashboard,可以可视化这些指标并更轻松地调试模型。第一个示例,在 MNIST 数据集上绘制模型的损失和准确性,使用的就是Scalars。
创建回调、指定一个目录来记录数据、在调用 fit 方法时传递回调。这种方式适用于大多数情况,但是如果我们想要记录一个不容易获得的自定义Scalars怎么办?可以使用 TensorFlow 的 Summary API。这个特殊的 API 用于收集摘要数据,以便以后的可视化和分析。
让我们看一个例子来更好地理解这一点。使用一个简单的正弦波作为想要在 TensorBoard 上显示的Scalars。
# Specify a directory for logging data
logdir = "./logs"
# Create a file writer to write data to our logdir
file_writer = tf.summary.create_file_writer(logdir)
# Loop from 0 to 199 and get the sine value of each number
for i in range(200):
with file_writer.as_default():
tf.summary.scalar('sine wave', np.math.sin(i), step=i)
tf.summary 中的 scalar 方法,可以记录几乎任何我们想要的标量数据。 使用 TensorBoard 时,不仅限于损失和指标。 运行上述命令后仪表板的输出如下:
2、TensorBoard Images
在处理图像数据时,如果希望查看数据查找问题,或者查看样本以确保数据质量,则可以使用 TensorBoard 的 Image Summary API。
继续回到 MNIST 数据集,看看图像在 TensorBoard 中是如何显示的:
# Load and normalize MNIST data
mnist_data = tf.keras.datasets.mnist
(X_train, y_train), (X_test, y_test) = mnist_data.load_data()
X_train, X_test = X_train / 255.0, X_test / 255.0
将数据的第一张图像并将其可视化。
# Reshape the first image
img = np.reshape(X_train[0], (-1, 28, 28, 1))
# Specify a directory for logging data
logdir = "./logs"# Create a file writer to write data to our logdir
file_writer = tf.summary.create_file_writer(logdir)
# With the file writer, log the image data
with file_writer.as_default():
tf.summary.image("Training data", img, step=0)
查看图像需要选择IMAGES选项:
3、TensorBoard Graphs
所有模型都可以看作是一个计算图。 有时很难通过单独查看代码来了解模型的体系结构。对其进行可视化可以很容易看到模型的结构, 也能够确保使用的架构是我们想要或设计的。
下面可视化之前用于 MNIST 数据集的模型。 下面是模型定义。
# Define the model
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])
还需要创建一个 TensorBoard 回调并在训练模型时使用它。
# Create a callback
tf_callback = tf.keras.callbacks.TensorBoard(log_dir="./logs")
# Pass in the callback when fitting the model
model.fit(X_train, y_train, epochs=5, callbacks=[tf_callback])
训练后,查看Graphs 选项:
这里显示的是模型的操作级图(逐层显示模型架构)。 这对于查看我们的模型是否正确以及每一层是否符合我们的预期非常重要。 该图的数据从底部流向顶部。
如果需要,还可以查看概念图。在侧边栏中找到 Tag 标题并将其更改为 Keras:
可以查看模型的结构是否正确。 图中的节点表明模型是一个顺序模型。
4、TensorBoard Distributions and Histograms 分布和直方图
TensorBoard 分布和直方图是跟踪模型另一种好方法。 使用官方提供的回调,在训练后TensorBoard 上会显示几个选项。 如果我们转到Distributions 选项卡,将看到如下图:
这组图表显示了构成模型的张量。 在每个图的水平轴上显示 epoch 数,在垂直轴上显示了每个张量的值。 这些图表基本上显示了这些张量如何随着训练的进行而随时间变化。 较暗的区域显示值在某个区域停留了更长的时间(没更新)。 如果担心模型权重在每个epoch 都没有正确更新,可以使用此选项发现这些问题。
我们在Histograms选项上看到了一组不同的图表,它们表示模型的张量。
这些图显示了模型中张量的不同视图。每个图都有五个相互堆叠的直方图,代表训练过的五个epoch中的每一个。它们显示了张量权重倾向于集中在哪个区域的信息。这对于调试模型的行为,发现异常非常有用。
5、TEXT
文本是创建机器学习模型时常用的数据类型。 很多时候,很难将文本数据可视化。 TensorBoard可以使用 Text Summary API 轻松地可视化文本数据。 让我们看看它是如何工作的。
使用文本 Hello World 作为一个简单的示例。
# Our sample text
sample_text = "Hello world!"
# Specify a directory for logging data
logdir = "./logs/text/"
# Create a file writer to write data to our logdir
file_writer = tf.summary.create_file_writer(logdir)
# With the file writer, log the text data
with file_writer.as_default():
tf.summary.text("sample_text", sample_text, step=0)
TensorBoar的Text 选项卡中输入的文本。
6、TensorBoard projector 投影
深度学习模型通常适用于具有大量维度的数据。 可视化这些维度可以让我们深入了解提高模型的性能。 TensorBoard 提供一个嵌入的投影,可以轻松的可视化高维数据。
首先,需要从 TensorBoard 导入投影插件。
from tensorboard.plugins import projector
我们将使用 IMDB 电影评论数据集来可视化嵌入。
import os
import tensorflow as tf
import tensorflow_datasets as tfds
# Load the data
(train_data, test_data), info = tfds.load(
"imdb_reviews/subwords8k",
split=(tfds.Split.TRAIN, tfds.Split.TEST),
with_info=True,
as_supervised=True,)encoder = info.features["text"].encoder
# Create training batches
train_batches = train_data.shuffle(1000).padded_batch(
10, padded_shapes=((None,), ())
)
# Create testing batches
test_batches = test_data.shuffle(1000).padded_batch(
10, padded_shapes=((None,), ())
)
# Get the first batch
train_batch, train_labels = next(iter(train_batches))
在上面的代码中,加载并预处理数据,下面代码将创建一个简单的模型来为文本生成嵌入,训练模型 epoch=1 并可视化结果。
# Create an embedding layer
embedding_dim = 16
embedding = tf.keras.layers.Embedding(
encoder.vocab_size,
embedding_dim)
# Configure the embedding layer as part of a Keras model
model = tf.keras.Sequential([
embedding,
tf.keras.layers.GlobalAveragePooling1D(),
tf.keras.layers.Dense(16, activation="relu"),
tf.keras.layers.Dense(1),])
# Compile the model
model.compile(
optimizer="adam",
loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
metrics=["accuracy"],
)
# Train the model for a single epoch
history = model.fit(
train_batches, epochs=1, validation_data=test_batches
)
拟合模型时需要将数据写入 logdir,类似于我们在前面部分中所做的。
# Set up a log dir, just like in previous sections
log_dir='/logs/imdb-example/'
if not os.path.exists(log_dir):
os.makedirs(log_dir)
# Save labels separately in a line-by-line manner.
with open(os.path.join(log_dir, 'metadata.tsv'), "w") as f:
for subwords in encoder.subwords:
f.write("{}\n".format(subwords))
# Fill in the rest of the labels with "unknown"
for unknown in range(1, encoder.vocab_size - len(encoder.subwords)):
f.write("unknown #{}\n".format(unknown))
# Save the weights we want to analyze as a variable
weights = tf.Variable(model.layers[0].get_weights()[0][1:])
# Create a checkpoint from embedding, the filename and key are the
# name of the tensor
checkpoint = tf.train.Checkpoint(embedding=weights)
checkpoint.save(os.path.join(log_dir, "embedding.ckpt"))
# Set up config
config = projector.ProjectorConfig()
embedding = config.embeddings.add()
# The name of the tensor will be suffixed by
# `/.ATTRIBUTES/VARIABLE_VALUE`
embedding.tensor_name = "embedding/.ATTRIBUTES/VARIABLE_VALUE"
embedding.metadata_path = 'metadata.tsv'
projector.visualize_embeddings(log_dir, config)
在TensorBoard 右上角的下拉菜单中的projector选项可以查看可视化的嵌入:
TensorBoard 插件
TensorBoard 还提供了很多不同的插件可以帮助我们完成各种不同的需求,下面介绍一些非常有用的插件
1、TensorFlow Profiler
TensorFlow Profiler 用于分析 TensorFlow 代码的执行情况。 这很重要,因为我们想知道正在运行的模型是否得到了适当的优化。 这里需要安装了Profiler插件。
pip install tensorboard_plugin_profile
创建一个模型,然后在拟合时使用 TensorBoard 回调。
# Create a callback
tf_callback = tf.keras.callbacks.TensorBoard(log_dir="./logs")
# Pass in the callback when fitting the model
model.fit(X_train, y_train, epochs=5, callbacks=[tf_callback])
当进入 TensorBoard 页面时,我们将看到一个名为 Profile 的新选项。 切换到此选项,将看到类似于下图的内容。
这是有很多信息的概览页面,所以让我们分解一下:
- 页面右上角有一个 Step-time 图,显示训练过程的哪些部分花费的时间最多。可以看到模型不是输入绑定的,很多时间都花在了启动内核上。
- 还看到了一些优化模型性能的建议
- 在我们的例子中,计算都没有使用 16 位操作,可以通过转换提高性能。
在左侧,有一个名为“Tools”的下拉菜单。 可以选择 Trace Viewer 来查看模型性能的瓶颈出现在哪里。 Trace Viewer 显示分析期间发生的 GPU 和 CPU 事件的时间线。
垂直轴显示具有不同跟踪事件的事件组。 从 CPU 和 GPU 收集跟踪事件。 每个矩形都是一个单独的跟踪事件。 可以单击其中任何一个来关注跟踪事件并对其进行分析。 还可以拖动光标一次选择多个事件。
在“Tools”下拉列表中,还可以使用“input_pipeline_analyzer”,可以根据收集的数据查看模型的输入管道性能。
这里可以告诉我们模型是否是输入绑定的。 例如上图意味着模型花费大量时间等待输入而不是运行推理。 它还可以告诉我们管道中的哪个阶段最慢。
为了更深入地了解不同的 TensorFlow 操作,还有另一个名为 TensorFlow stats 选项,可以显示模型正在执行的不同操作的细分。
运行模型时,饼图显示了正在计算的不同操作。 包括编码、矩阵乘法等计算,以及需要执行的许多其他推理操作。 在优化模型时,可以关注其中哪些花费最多的时间的操作。
2、Fairness Indicators Dashboard
Fairness Indicators Dashboard 帮助我们计算二进制和多类分类器的不同公平指标。 可以评估模型在不同运行中的公平性,并比较它们在不同组之间的性能。
要开始在我们的数据上使用 Fairness Indicators Dashboard,需要安装一些依赖:
pip install fairness_indicators
pip install tensorboard-plugin-fairness-indicators
导入插件:
from tensorboard_plugin_fairness_indicators import summary_v2
summary_v2的使用方法与在前面章节中将数据记录到 logdir 时使用 tf.summary 一样。
# Create a file writer to write data to our logdir
file_writer = tf.summary.create_file_writer(logdir)
# Write data to our result directory
with file_writer.as_default():
summary_v2.FairnessIndicators(result_dir, step=1)
结果如下:
在 TensorBoard 中会有一个新的Fairness Indicators 选项卡。 在这里,可以查看模型预测的不同类别值的细分以及它们与基线的百分比差异,以确定模型是否公平。
使用 What-If 工具了解模型
TensorBoard 附带一个假设分析工具 (WIT),可以帮助我们理解黑盒分类和回归模型。 使用这个工具,可以对一组数据进行预测,并以不同的方式可视化结果。
也可以手动或以编程方式编辑示例,查看更改它们如何影响模型的预测。
要使用 WIT需要提供模型和数据,如果想要更深入的探索模型必须带有分类、回归或预测 API 的 TensorFlow Serving 进行部署。
另外要进行预测的数据集应该以 TFRecord 格式存储,并且可以由我们运行 TensorBoard 的服务器访问。
设置完成后,转到 TensorBoard Dashboard 并从页面右上角的下拉菜单中选择 What-If Tool 选项。应该看到一个如下所示的页面:
第一个字段是提供模型的推理地址。 如果在本地提供TensorFlow Serving ,这将等于 localhost:port。 还需要输入模型名称、可选的模型版本和模型的签名。
输入数据所在的路径。上面提到的 TFRecord 文件。
最后单击Accept按钮,我们就会跳转到结果页面。
数据集中的每个点现在都根据它们的类进行着色。 可以对数据进行分箱、分桶、创建散点图和对数据点进行不同着色等操作。
将 TensorBoard 数据作为 DataFrame进行访问
TensorBoard 主要是一个用于可视化数据的 GUI 工具。但是一些用户可能希望以编程方式与 TensorBoard 数据进行交互,例如自定义可视化和临时的分析。所以可以将 TensorBoard 数据作为 DataFrame 访问,这样可以在单独的程序中使用。
这个API 仍处于试验阶段,因此可能后续版本还会有重大的更改。
我们只需将“logdir”上传到 TensorBoard.dev 才能使用此功能,这部分我们需要一些依赖项。首先需要确认已经安装了 Pandas。还需要一种可视化数据的方法。常用的库是 Matplotlib 和 Seaborn。
TensorBoard.dev 上的 TensorBoard logdir 被称为experiment。每个experiment都有一个唯一的 ID,我们可以使用它以编程方式访问数据。
# Change the experiment id to our own
experiment_id = "insert experiment ID here"
# Get the experiment using the id
experiment = tb.data.experimental.ExperimentFromDev(experiment_id)
# Save the scalars to a dataframe
df = experiment.get_scalars()
现在df 中拥有所有可用的 logdir 数据。
现在可以像操作任何其他 DataFrame 一样操作它来进一步分析。
将 TensorBoard 与 PyTorch 结合使用
PyTorch 是另一个深受研究人员欢迎的深度学习框架。 PyTorch 现在也已经支持 TensorBoard了。
在使用 TensorFlow 时,使用 Summary API 创建了将数据记录到 logdir 文件夹的对象。 在使用 PyTorch 时,官方也提供了类似的API。
# Import the summary writer
from torch.utils.tensorboard import SummaryWriter# Create an instance of the object
writer = SummaryWriter()
这样就可以使用与 TensorFlow 相同的方式处理的相同 MNIST 数据集。
import torch
import torchvision
from torchvision import datasets, transforms
# Compose a set of transforms to use later on
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.5,), (0.5,))
])
# Load in the MNIST dataset
trainset = datasets.MNIST(
'mnist_train',
train=True,
download=True,
transform=transform
)
# Create a data loader
trainloader = torch.utils.data.DataLoader(
trainset,
batch_size=64,
shuffle=True
)
# Get a pre-trained ResNet18 model
model = torchvision.models.resnet18(False)
# Change the first layer to accept grayscale images
model.conv1 = torch.nn.Conv2d(1, 64, kernel_size=7, stride=2, padding=3, bias=False)
# Get the first batch from the data loader
images, labels = next(iter(trainloader))
# Write the data to TensorBoard
grid = torchvision.utils.make_grid(images)
writer.add_image('images', grid, 0)
writer.add_graph(model, images)
writer.close()
运行此程序后,转到 TensorBoard 并查看保存的输出。
得到了与使用 TensorFlow 时相似的输出。
使用 TensorBoard.dev 上传和共享结果
TensorBoard.dev 是 TensorBoard 的一个组件,它允许我们在网络上托管机器学习结果。 对于那些渴望展示他们的成果的人来说这是适合的工具。
可以使用以下命令从终端或命令提示符将其上传到 TensorBoard.dev:
tensorboard dev upload --logdir {logs}
请确保不要上传任何敏感数据!
使用 Google 帐户授权上传后,会获得一个代码。 输入代码后,返回一个指向上传的 TensorBoard 日志的链接。
现在可以与任何人分享这个链接,让他们看到我们所做的工作。
使用 TensorBoard 的限制
尽管 TensorBoard 附带了许多用于可视化我们的数据和模型的工具,但它也有其局限性。
1、缺乏用户管理
TensorBoard 没有用户的概念,因为它在单一环境中工作。也不能在同一台机器上运行多个 TensorBoard 实例,因此如果我们同时处理多个项目,使用起来可能会很有挑战性。
2、难以在团队环境中使用
与上述限制类似,TensorBoard 实例不能在其他用户之间共享。如果有几个人在同一个项目上工作,需要一个集中的dashboard和每个人的单独工作区。 TensorBoard 不支持此功能。
3、不支持数据和模型版本控制
在调整模型或设置超参数值时,我们需要保存不同的模型和训练数据版本。尤其是在进行实验时,希望同时查看不同版本的模型和数据。 TensorBoard不能将某个运行或一组数据标记为特别重要。
4、执行大量运行时会出现问题
TensorBoard 并没有考虑到大量连续运行。如果继续运行模型并重复记录数据,将遇到 UI 问题,使界面难以使用。
5、不支持可视化视频文件和非结构化数据格式
某些数据类型无法在 TensorBoard 中可视化。特别是常用的视频数据。如果工作涉及对此类数据进行建模,则很难使用 TensorBoard。
总结
本文已经详细介绍了 TensorBoard,它是用于可视化机器学习模型的数据可视化工具包。本文介绍了TensorBoard所有基本组件以及新的实验性功能,例如假设工具和公平指标组件。借助这些功能,可以能够轻松查看和调试我们训练的模型的内部工作,并最终提高它们的性能。
作者:Zito Relova
相关推荐
- AI「自我复制」能力曝光,RepliBench警示:大模型正在学会伪造身份
-
科幻中AI自我复制失控场景,正成为现实世界严肃的研究课题。英国AISI推出RepliBench基准,分解并评估AI自主复制所需的四大核心能力。测试显示,当前AI尚不具备完全自主复制能力,但在获取资源...
- 【Python第三方库安装】介绍8种情况,这里最全看这里就够了!
-
**本图文作品主要解决CMD或pycharm终端下载安装第三方库可能出错的问题**本作品介绍了8种安装方法,这里最全的python第三方库安装教程,简单易上手,满满干货!希望大家能愉快地写代码,而不要...
- pyvips,一个神奇的 Python 库!(pythonvip视频)
-
大家好,今天为大家分享一个神奇的Python库-pyvips。在图像处理领域,高效和快速的图像处理工具对于开发者来说至关重要。pyvips是一个强大的Python库,基于libvips...
- mac 安装tesseract、pytesseract以及简单使用
-
一.tesseract-OCR的介绍1.tesseract-OCR是一个开源的OCR引擎,能识别100多种语言,专门用于对图片文字进行识别,并获取文本。但是它的缺点是对手写的识别能力比较差。2.用te...
- 实测o3/o4-mini:3分钟解决欧拉问题,OpenAI最强模型名副其实!
-
号称“OpenAI迄今为止最强模型”,o3/o4-mini真实能力究竟如何?就在发布后的几小时内,网友们的第一波实测已新鲜出炉。最强推理模型o3,即使遇上首位全职提示词工程师RileyGoodsid...
- 使用Python将图片转换为字符画并保存到文件
-
字符画(ASCIIArt)是将图片转换为由字符组成的艺术作品。利用Python,我们可以轻松实现图片转字符画的功能。本教程将带你一步步实现这个功能,并详细解释每一步的代码和实现原理。环境准备首先,你...
- 5分钟-python包管理器pip安装(python pip安装包)
-
pip是一个现代的,通用、普遍的Python包管理工具。提供了对Python包的查找、下载、安装、卸载的功能,是Python开发的基础。第一步:PC端打开网址:选择gz后缀的文件下载第二步:...
- 网络问题快速排查,你也能当好自己家的网络攻城狮
-
前面写了一篇关于网络基础和常见故障排查的,只列举了工具。没具体排查方式。这篇重点把几个常用工具的组合讲解一下。先有请今天的主角:nslookup及dig,traceroute,httping,teln...
- 终于把TCP/IP 协议讲的明明白白了,再也不怕被问三次握手了
-
文:涤生_Woo下周就开始和大家成体系的讲hadoop了,里面的每一个模块的技术细节我都会涉及到,希望大家会喜欢。当然了你也可以评论或者留言自己喜欢的技术,还是那句话,希望咱们一起进步。今天周五,讲讲...
- 记一次工控触摸屏故障的处理(工控触摸屏维修)
-
先说明一下,虽然我是自动化专业毕业,但已经很多年不从事现场一线的工控工作了。但自己在单位做的工作也牵涉到信息化与自动化的整合,所以平时也略有关注。上一周一个朋友接到一个活,一家光伏企业用于启动机组的触...
- 19、90秒快速“读懂”路由、交换命令行基础
-
命令行视图VRP分层的命令结构定义了很多命令行视图,每条命令只能在特定的视图中执行。本例介绍了常见的命令行视图。每个命令都注册在一个或多个命令视图下,用户只有先进入这个命令所在的视图,才能运行相应的命...
- 摄像头没图像的几个检查方法(摄像头没图像怎么修复)
-
背景描述:安防监控项目上,用户的摄像头运行了一段时间有部分摄像头不能进行预览,需要针对不能预览的摄像头进行排查,下面列出几个常见的排查方法。问题解决:一般情况为网络、供电、设备配置等情况。一,网络检查...
- 小谈:必需脂肪酸(必需脂肪酸主要包括)
-
必需脂肪酸是指机体生命活动必不可少,但机体自身又不能合成,必需由食物供给的多不饱和脂肪酸(PUFA)。必需脂肪酸主要包括两种,一种是ω-3系列的α-亚麻酸(18:3),一种是ω-6系列的亚油酸(18:...
- 期刊推荐:15本sci四区易发表的机械类期刊
-
虽然,Sci四区期刊相比收录在sci一区、二区、三区的期刊来说要求不是那么高,投稿起来也相对容易一些。但,sci四区所收录的期刊中每本期刊的投稿难易程度也是不一样的。为方便大家投稿,本文给大家推荐...
- be sick of 用法考察(be in lack of的用法)
-
besick表示病了,做谓语.本身是形容词,有多种意思.最通常的是:生病,恶心,呕吐,不适,晕,厌烦,无法忍受asickchild生病的孩子Hermother'sverysi...
- 一周热门
- 最近发表
-
- AI「自我复制」能力曝光,RepliBench警示:大模型正在学会伪造身份
- 【Python第三方库安装】介绍8种情况,这里最全看这里就够了!
- pyvips,一个神奇的 Python 库!(pythonvip视频)
- mac 安装tesseract、pytesseract以及简单使用
- 实测o3/o4-mini:3分钟解决欧拉问题,OpenAI最强模型名副其实!
- 使用Python将图片转换为字符画并保存到文件
- 5分钟-python包管理器pip安装(python pip安装包)
- 网络问题快速排查,你也能当好自己家的网络攻城狮
- 终于把TCP/IP 协议讲的明明白白了,再也不怕被问三次握手了
- 记一次工控触摸屏故障的处理(工控触摸屏维修)
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- logstashinput (65)
- hadoop端口 (65)
- vue阻止冒泡 (67)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)