普通视图

发现新文章,点击刷新页面。
昨天以前若绾

[Linux指南] Linux各发行版防火墙端口放行的方法 Centos | Ubuntu | Debian

2023年3月12日 08:00

Centos#

firewall-cmd --zone=public --add-port={PORT}/tcp --permanent

--zone                #作用域
--add-port=80/tcp     #添加端口,格式:端口/通讯协议
--permanent           #使操作永久生效,没有此参数重启后失效

#例如,要放行HTTP协议的80端口,可以使用以下命令:
sudo firewall-cmd --add-port=80/tcp --permanent
sudo firewall-cmd --reload

Ubuntu#

Ubuntu 默认使用 ufw 防火墙。要放行一个端口,可以使用以下命令:

sudo ufw allow <port>/<protocol>

#例如,要放行HTTP协议的80端口,可以使用以下命令:
sudo ufw allow 80/tcp

Debian#

Debian 默认使用 iptables 防火墙。若系统未预装,可以执行以下命令安装 iptables

apt-get update
apt-get install iptables
apt-get install iptables-persistent

要放行一个端口,可以使用以下命令:


sudo iptables -A INPUT -p <protocol> --dport <port> -j ACCEPT

#例如,要放行HTTP协议的80端口,可以使用以下命令:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

#保存规则(重启后失效)
iptables-save

#保存规则(重启后仍然生效)
netfilter-persistent save
netfilter-persistent reload

#查看当前防火墙规则
iptables -L

Chevereto V4的进阶使用:加入图片审核及儿童色情鉴黄机制

作者 Royc30ne
2023年5月13日 12:46

文章首发于# Chevereto V4 的进阶使用:加入图片审核及儿童色情鉴黄机制, 转载请注明出处。

Chevereto V4 是一个非常出色的图片分享和存储平台,它提供了一个简洁易用的界面和强大的功能。然而,如何确保分享的图片内容的安全性和合法性,是一个严肃的问题。所以,为了能够让各位站长避免自己的图床因为别有用心的人上传一些违反公共道德及法律的图片而收到制裁,我们需要引入一个有效的图片审核及儿童色情内容的鉴黄机制。本篇博客将详细介绍如何在 Chevereto V4 中加入图片审核和儿童色情鉴黄机制。

一、图片审核

  1. 启用图片审核

    首先,我们需要在 Chevereto 的后台管理系统中启用图片审核功能。这可以在设置 -> 图片上传中找到。启用后,所有上传的图片在发布前都需要经过管理员的手动审核。

  2. 图片审核流程

    当用户上传图片后,这些图片将会出现在 "待审核" 的列表中。管理员可以查看这些图片,然后选择通过或者拒绝。如果图片被拒绝,系统将会自动删除该图片,并向上传者发送通知。

二、儿童色情鉴黄机制

对于儿童色情内容的检测,我们需要借助一些 AI 工具,这里我们就可以用到 Chevereto V4 内建由 ModerateContent提供的儿童色情鉴黄 API。

  1. 启用 AI 工具

    ModerateContent 已经提供了 RESTful API,并将其集成到 Chevereto 中。首先,我们需要在这里获取一个免费的 API Key。

  2. 配置检测参数

    然后,在 Chevereto 的后台管理系统中,找到设置 -> 外部服务。

    开启 ModerateContent 并且输入我们刚才获取的 API Key,就大功告成了。

  3. 自动检测流程

    当用户上传图片时,系统会自动调用 AI 工具进行检测。如果检测到儿童色情内容,系统将会自动拒绝该图片,并向上传者发送通知。

注意

ModerateContent 的免费试用每月仅限 10000 张,如果有更多需求的话需要提升到 Pay As You Go。详细的自费可以见如下图示。

小结

通过以上步骤,我们就可以在 Chevereto V4 中加入图片审核和儿童色情鉴黄机制了。这样可以有效地保护用户的权益,防止不适宜的内容传播。然而,这样的机制并不能完全替代人的判断,因此管理员仍然需要定期对系统的判断进行复查。

这是一个复杂但重要的过程,我们必须始终保持警惕,以确保我们的网络空间安全、健康。我们也期待更多的技术和工具能够帮助我们更有效地管理和审核图片内容,实现真正的智能化、自动化。

更多常见问题

1. 如何处理误判的情况?

当 AI 工具误判时,可以通过人工复查来纠正。如果发现某个工具的误判率较高,可以考虑调整其配置参数,或者更换其他更精确的 AI 工具。

2. 如何防止恶意用户反复上传不适宜的图片?

可以在用户管理系统中添加限制,比如上传图片的频率限制、一次上传图片数量的限制等。对于频繁上传不适宜图片的用户,可以进行警告、禁言或者封号等处理。

3. 如果用户对审核结果有异议,应该如何处理?

可以设立一个申诉机制,用户可以通过申诉来反馈他们对审核结果的异议。管理员收到申诉后,应该再次对相关图片进行审查,并给出合理的回复。

[Linux指南]手把手教你配置Ubuntu下的CUDA、cuDNN环境

作者 Royc30ne
2023年4月11日 10:48

文章首发于若绾 [Linux 指南] 手把手教你配置 Ubuntu 下的 CUDA、cuDNN 环境,转载请注明出处。

导言

作为深度学习和并行计算的核心工具,CUDA(Compute Unified Device Architecture)为 NVIDIA 显卡提供了并行计算的能力。在本教程中,我们将详细介绍如何在 Ubuntu 操作系统下配置 CUDA。本教程以 CUDA 12.1 和 Ubuntu 20.04 为例进行说明,但对于其他版本的 CUDA 和 Ubuntu,配置过程也相差无几。

https://p.v50.tools/images/2023/04/11/cuda-logo.jpeg

安装 CUDA

步骤 1:确认系统兼容性

在配置 CUDA 之前,首先要确保你的系统满足安装要求。以下是需要检查的项目:

  1. 确保你的 GPU 是 NVIDIA GPU,并支持 CUDA 计算能力。可以通过 NVIDIA 官方网站查看支持的 GPU 列表。
  2. 确保你的系统是 64 位的 Ubuntu 操作系统。
  3. 安装 Linux 内核版本在 4.4 及以上的版本。

步骤 2:更新系统软件包

打开终端并输入以下命令更新系统软件包:

sudo apt update
sudo apt upgrade

步骤 3:安装 NVIDIA 显卡驱动

如果你的系统尚未安装 NVIDIA 显卡驱动,可使用以下命令安装:

sudo ubuntu-drivers autoinstall

安装完成后,重启计算机以确保驱动程序正确加载。

步骤 4:下载 CUDA 工具包

前往CUDA ToolKit 官方网站下载相应版本的 CUDA Toolkit,的安装包(以 CUDA 12.1 为例)

https://p.v50.tools/images/2023/04/11/cuda-install.png

步骤 5:安装 CUDA Toolkit

你可以运行以下命令下载并安装 CUDA Toolkit:

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda-repo-ubuntu2004-12-1-local_12.1.0-530.30.02-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2004-12-1-local_12.1.0-530.30.02-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2004-12-1-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda

步骤 6:配置环境变量

为了确保系统能够正确识别 CUDA Toolkit 的安装位置,需要设置环境变量。打开~/.bashrc 文件,添加以下内容:

#打开~/.bashrc
sudo vim ~/.bashrc

#在文末添加下两行并保存关闭
export PATH=/usr/local/cuda-12.1/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

保存文件并运行以下命令使环境变量生效:

source ~/.bashrc

步骤 7:验证 CUDA 安装

运行以下命令验证 CUDA 是否已正确安装

nvcc --version

如果安装成功,你将看到类似于以下的输出,其中显示了 CUDA 编译器(nvcc)的版本信息:

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Tue_Sep_21_19:24:46_PDT_2021
Cuda compilation tools, release 12.1, VXX.X.X
Build cuda_12.1.r12.1/compiler.XX

安装 cuDNN 库(可选)

cuDNN 是一款深度学习框架的 GPU 加速库,支持 TensorFlow、PyTorch 等框架。要安装 cuDNN,请按照以下步骤操作:

https://p.v50.tools/images/2023/04/11/cuDNN-install.png

  1. 前往 NVIDIA 官方网站注册并登录,然后进入cuDNN 下载页面
  2. 选择与你安装的 CUDA 版本兼容的 cuDNN 版本,下载对应的压缩包。
  3. 解压缩下载的文件。假设文件解压缩到了~/Downloads/cudnn-local-repo-ubuntu2004-8.8.1.3_1.0-1_amd64.deb 目录。
  4. 在终端中运行以下命令安装 cuDNN 库,在置行以下命令之前,您必须将 X.Y 和 8.x.x.x 替换为您特定的 CUDA 和 cuDNN 版本。:
cd ~/Downloads/
sudo dpkg -i cudnn-local-repo-${OS}-8.x.x.x_1.0-1_amd64.deb

#导入GPG key
sudo cp /var/cudnn-local-repo-*/cudnn-local-*-keyring.gpg /usr/share/keyrings/

#刷新apt源
sudo apt-get update

#安装库
sudo apt-get install libcudnn8=8.x.x.x-1+cudaX.Y
sudo apt-get install libcudnn8-dev=8.x.x.x-1+cudaX.Y
sudo apt-get install libcudnn8-samples=8.x.x.x-1+cudaX.Y

总结

至此,你已经成功配置了 Ubuntu 下的 CUDA 环境。现在,你可以使用 GPU 进行深度学习和高性能计算了。在接下来的工作中,你可能还需要根据实际需求安装和配置深度学习框架,例如 TensorFlow 或 PyTorch。

[机器学习]K-means算法详解:原理、优缺点、代码实现、变体及实际应用

作者 Royc30ne
2023年3月24日 08:00

K-means 算法是一种非常流行的无监督学习方法,主要应用于聚类问题。本篇博客将详细介绍 K-means 算法的原理、优缺点及实际应用场景。

算法原理

K-means 算法的核心思想是将数据划分为 K 个独立的簇 (cluster),使得每个簇内的数据点距离尽可能小,而簇与簇之间的距离尽可能大。下面是 K-means 算法的具体步骤:

  1. 初始化:选择 K 个数据点作为初始质心(centroid),这些质心可以是随机选择的,也可以是通过其他方法选定的。

  2. 分配:将每个数据点分配到离它最近的质心所代表的簇中。

  3. 更新:重新计算每个簇的质心,方法是将簇内所有数据点的均值作为新的质心。

  4. 重复步骤 2 和 3,直到质心不再发生显著变化或达到迭代次数上限。

优点

K-means 算法具有以下优点:

  1. 简单易懂:K-means 算法的步骤简单,容易理解和实现。

  2. 计算效率高:K-means 算法的时间复杂度相对较低,适用于大规模数据集。

  3. 可扩展性强:K-means 算法可以通过各种改进和优化应用于不同类型的数据和问题。

缺点

K-means 算法也存在一些局限性:

  1. 需要预先指定 K 值:在实际应用中,选定合适的 K 值可能需要尝试多种方法。

  2. 对初始质心敏感:算法的结果可能受到初始质心选择的影响,导致局部最优解。

  3. 对噪声和离群点敏感:K-means 算法容易受到噪声和离群点的影响,可能导致簇划分不准确。

  4. 对簇形状和大小敏感:K-means 算法假设簇是凸的和大小相似的,对于其他形状和大小的簇可能效果不佳。

代码实现

下面是使用 Python 和 NumPy 实现 K-means 算法的简单示例:

import numpy as np

def initialize_centroids(data, k):
    # 从数据集中随机选择k个点作为初始质心
    centroids = data[np.random.choice(data.shape[0], k, replace=False)]
    return centroids

def assign_clusters(data, centroids):
    # 计算数据点与质心之间的距离,并将数据点分配给最近的质心
    distances = np.linalg.norm(data[:, np.newaxis] - centroids, axis=2)
    cluster_labels = np.argmin(distances, axis=1)
    return cluster_labels

def update_centroids(data, cluster_labels, k):
    # 计算每个簇的新质心,即簇内数据点的均值
    new_centroids = np.array([data[cluster_labels == i].mean(axis=0) for i in range(k)])
    return new_centroids

def kmeans(data, k, max_iterations=100, tol=1e-4):
    # 初始化质心
    centroids = initialize_centroids(data, k)
    
    for _ in range(max_iterations):
        # 分配簇
        cluster_labels = assign_clusters(data, centroids)
        
        # 更新质心
        new_centroids = update_centroids(data, cluster_labels, k)
        
        # 检查收敛条件
        if np.linalg.norm(new_centroids - centroids) < tol:
            break
        
        centroids = new_centroids
    
    return centroids, cluster_labels

# 示例:使用K-means算法对随机生成的数据进行聚类
np.random.seed(42)
data = np.random.rand(300, 2)  # 生成300个二维数据点

k = 3  # 聚类数量
centroids, cluster_labels = kmeans(data, k)

print("Centroids:\n", centroids)
print("Cluster Labels:\n", cluster_labels)

请注意,这是一个简化的实现,仅用于演示 K-means 算法的基本原理。在实际应用中,建议使用成熟的机器学习库,如 scikit-learn,以获得更稳定、高效的实现和额外的功能。

改进方法及变体

针对 K-means 算法的局限性,有以下改进方法:

  1. 选择合适的 K 值:可以尝试不同的 K 值,通过轮廓系数(Silhouette Coefficient)、肘部法则(Elbow Method)等方法评估聚类效果,选择最佳的 K 值。

  2. 优化初始质心选择:使用 K-means++ 算法改进初始质心选择,降低算法收敛到局部最优解的风险。

  3. 增量式 K-means:对于大规模数据集,可以采用增量式 K-means 算法进行分布式计算,提高计算效率。

  4. 引入核函数:将 K-means 算法扩展为 Kernel K-means 算法,使用核函数将数据映射到高维空间,处理非线性可分的数据。

K-means++

K-means++ 是一种改进的 K-means 算法,主要针对初始质心选择的问题。K-means++ 的优势在于能够选择更好的初始质心,从而提高算法的收敛速度,降低陷入局部最优解的风险。K-means++ 的初始质心选择步骤如下:

  1. 从数据集中随机选择一个点作为第一个质心。

  2. 对于数据集中的每个点,计算它与当前已选择质心的最近距离。

  3. 以距离的平方作为权重,按照概率分布随机选择下一个质心。

  4. 重复步骤 2 和 3,直到选择了 K 个质心。

  5. 使用选定的初始质心运行 K-means 算法。

增量式 K-means

增量式 K-means(Incremental K-means)也称为在线 K-means,是针对大规模数据集的一种改进算法。与传统的 K-means 算法不同,增量式 K-means 每次只处理一个数据点,不断更新质心,而不是一次性处理整个数据集。这种方法适用于分布式计算和大规模数据集,可以大大提高计算效率。增量式 K-means 的主要步骤如下:

  1. 初始化 K 个质心。

  2. 遍历数据集,对每个数据点执行以下操作:

    • 计算该点与当前质心的最近距离,将其分配到最近的簇。

    • 更新被分配到的簇的质心。

  3. 重复步骤 2,直到质心稳定或达到迭代次数上限。

Kernel K-means

Kernel K-means 是一种基于核方法的 K-means 算法,可以处理非线性可分的数据。核方法通过将数据映射到高维特征空间,使得原本在低维空间中不可分的数据在高维空间中变得线性可分。Kernel K-means 的主要步骤如下:

  1. 选择合适的核函数(如 RBF 核、多项式核等)和参数。

  2. 将数据集映射到高维特征空间。

  3. 在高维特征空间中执行 K-means 算法。

  4. 将聚类结果投影回原始数据空间。

Kernel K-means 可以处理复杂的数据结构,但计算复杂度相对较高,可能不适合大规模数据集。在实际应用中,可以根据问题的特点选择合适的 K-means 算法变体。

应用场景

K-means 算法广泛应用于各个领域,如:

  1. 图像分割:将图像中的像素聚类为 K 个簇,可以实现图像分割和简化。

  2. 文档聚类:将文档按照内容相似度进行聚类,有助于文档分类、信息检索和推荐系统。

  3. 客户细分:将客户按照购买行为、兴趣爱好等特征进行聚类,有助于企业针对不同群体制定个性化的营销策略。

  4. 异常检测:通过聚类,可以发现数据中的离群点或异常点,进而进行异常检测或数据清洗。

  5. 降维:K-means 算法可以与主成分分析(PCA)等降维技术结合,实现数据降维和可视化。

❌
❌