50次pgd攻击,生成mnist数据集的对抗样本,并将对抗样本转化为npy文件

时间: 2023-05-25 08:03:14 浏览: 60
以下是 Python 代码,使用 FGSM 和 PGD 攻击生成 MNIST 数据集的对抗样本,并将其保存为 .npy 文件: ```python import tensorflow as tf import numpy as np from keras.datasets import mnist # 加载 MNIST 数据集 (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 x_train = x_train.reshape(-1, 28, 28, 1) x_test = x_test.reshape(-1, 28, 28, 1) # 定义模型 model = tf.keras.models.Sequential([ tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(28, 28, 1)), tf.keras.layers.MaxPooling2D((2, 2)), tf.keras.layers.Flatten(), tf.keras.layers.Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # 训练模型 model.fit(x_train, y_train, epochs=5, validation_data=(x_test, y_test)) # FGSM 攻击 def fgsm_attack(image, epsilon, gradient): sign_gradient = tf.sign(gradient) perturbed_image = image + epsilon * sign_gradient perturbed_image = tf.clip_by_value(perturbed_image, 0, 1) return perturbed_image # PGD 攻击 def pgd_attack(model, image, label, epsilon, alpha, iterations): adv_image = tf.identity(image) for i in range(iterations): with tf.GradientTape() as tape: tape.watch(adv_image) prediction = model(adv_image) loss = tf.keras.losses.sparse_categorical_crossentropy(label, prediction) gradient = tape.gradient(loss, adv_image) signed_grad = tf.sign(gradient) perturbed_image = adv_image + alpha*signed_grad perturbed_image = tf.clip_by_value(perturbed_image, 0, 1) perturbed_image = fgsm_attack(perturbed_image, epsilon, gradient) adv_image = tf.identity(perturbed_image) return adv_image.numpy() # 生成对抗样本并保存为 npy 文件 eps = 0.15 alpha = 0.01 iters = 50 adversarial_images = [] for i in range(x_test.shape[0]): img = np.expand_dims(x_test[i], axis=0) label = tf.cast(y_test[i], tf.int64) adv_img = pgd_attack(model, img, label, eps, alpha, iters) adversarial_images.append(adv_img) adversarial_images = np.array(adversarial_images) np.save('adversarial_mnist.npy', adversarial_images) ``` 在以上代码中,我们首先加载 MNIST 数据集,并将像素值缩小到 0 到 1 之间。然后,我们定义了一个简单的 CNN 模型,并使用训练集对其进行了训练。 接下来,我们定义并实现了 FGSM 和 PGD 攻击。FGSM 攻击只需在模型梯度的基础上添加扰动,而 PGD 攻击是一种迭代攻击,每次迭代会计算梯度并加上一个小扰动,最终生成对抗样本。 最后,我们使用 PGD 攻击生成 MNIST 数据集的 50 个对抗样本,并将其保存为 .npy 文件。

相关推荐

作为AI助手,我无法直接生成对抗样本。不过,下面是一些可以生成对抗样本的Python代码,您可以参考一下: python import numpy as np import tensorflow as tf import keras from keras.datasets import mnist # Load MNIST dataset (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train = x_train.astype('float32') / 255. x_test = x_test.astype('float32') / 255. # Define the model model = keras.models.Sequential([ keras.layers.Flatten(input_shape=[28, 28]), keras.layers.Dense(300, activation="relu"), keras.layers.Dense(100, activation="relu"), keras.layers.Dense(10, activation="softmax") ]) # Compile the model model.compile(loss="sparse_categorical_crossentropy", optimizer="adam", metrics=["accuracy"]) # Train the model model.fit(x_train, y_train, epochs=50, validation_data=(x_test, y_test)) # Generate adversarial examples using Projected Gradient Descent (PGD) attack def pgd_attack(model, x, y, eps=0.1, alpha=0.01, iter=40): delta = tf.zeros_like(x, dtype=tf.float32) for t in range(iter): with tf.GradientTape() as tape: tape.watch(delta) loss = keras.losses.sparse_categorical_crossentropy(y, model(x + delta)) # Compute gradients g = tape.gradient(loss, delta) # Add a small perturbation to the delta using the gradient g = tf.sign(g) delta = tf.clip_by_value(delta + alpha * g, -eps, eps) delta = tf.clip_by_value(x + delta, 0, 1) - x return delta.numpy() adv_x_train = np.zeros_like(x_train) adv_x_test = np.zeros_like(x_test) for i in range(len(x_train)): adv_x_train[i] = x_train[i] + pgd_attack(model, x_train[i][np.newaxis], np.array([y_train[i]])) for i in range(len(x_test)): adv_x_test[i] = x_test[i] + pgd_attack(model, x_test[i][np.newaxis], np.array([y_test[i]])) # Save the adversarial examples np.save("adv_x_train.npy", adv_x_train) np.save("adv_x_test.npy", adv_x_test) 这段代码会加载MNIST数据集,并对其进行训练。然后,使用PGD攻击生成对抗样本,并保存为npy文件。需要使用TensorFlow2.x和Keras库来运行此代码。
PGD攻击是一种迭代的梯度下降方法,用于生成对抗样本。在MNIST数据集上进行PGD攻击的步骤如下: 1. 加载MNIST数据集。 python import tensorflow as tf from tensorflow.keras.datasets import mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train = x_train.astype('float32') / 255 x_test = x_test.astype('float32') / 255 2. 定义模型。 python model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) 3. 针对每个测试样本,生成对抗样本。 python import numpy as np def pgd_attack(model, x, y, epsilon=0.3, alpha=0.01, num_iter=40): # epsilon: 最大扰动 # alpha: 步长 # num_iter: 迭代次数 # 保存原始图片和标签 x_adv = np.copy(x) y_adv = np.copy(y) for i in range(num_iter): # 计算梯度并加入噪声 with tf.GradientTape() as tape: tape.watch(x_adv) logits = model(x_adv) loss = tf.keras.losses.sparse_categorical_crossentropy(y_adv, logits) grad, = tape.gradient(loss, x_adv) grad = tf.sign(grad) noise = tf.random.uniform(tf.shape(x_adv), -epsilon, epsilon) grad = grad + noise grad = tf.clip_by_value(grad, -epsilon, epsilon) # 对抗样本更新并投影到L_{\infty}集合中 x_adv = x_adv + alpha * grad x_adv = tf.clip_by_value(x_adv, x - epsilon, x + epsilon) x_adv = tf.clip_by_value(x_adv, 0, 1) # 找到最近的正确分类 logits = model(x_adv) pred = tf.argmax(logits, axis=1) mask = pred == y_adv x_adv = tf.where(mask, x_adv, x_adv + 0) return x_adv.numpy(), y_adv.numpy() 4. 对测试集进行攻击,并保存对抗样本。 python x_adv_list = [] y_adv_list = [] for i in range(len(x_test)): x_adv, y_adv = pgd_attack(model, x_test[i:i+1], y_test[i:i+1]) x_adv_list.append(x_adv.reshape(28, 28)) y_adv_list.append(y_adv) x_adv = np.array(x_adv_list) y_adv = np.array(y_adv_list) np.save('x_adv_pgd.npy', x_adv) np.save('y_adv_pgd.npy', y_adv) 在保存了对抗样本之后,可以用以下代码加载并评估模型在对抗样本上的表现。 python x_adv = np.load('x_adv_pgd.npy') y_adv = np.load('y_adv_pgd.npy') model.evaluate(x_adv, y_adv)
要获得对抗样本FGM(Fast Gradient Method),你可以按照以下步骤进行: 1. 准备一个用于攻击的模型:首先,你需要一个已经训练好的模型,这个模型可以是任何类型的机器学习模型,比如分类器或者神经网络。 2. 选择一个样本:选择你想要生成对抗样本的原始样本。这个样本可以是任何你希望攻击的数据点,比如图像、文本或者声音。 3. 计算损失函数:使用原始模型对选定的样本进行预测,并计算预测结果与正确标签之间的损失函数。这个损失函数可以是交叉熵、均方误差等,具体取决于你的模型和任务。 4. 计算梯度:计算损失函数相对于输入样本的梯度。这个梯度将指导你在输入空间中移动,以生成对抗样本。 5. 改变输入样本:根据计算得到的梯度来改变输入样本。FGM方法中,你可以通过在输入样本上添加或减去梯度乘以一个小的扰动值来实现。 6. 重复上述步骤:如果你想要生成更强大的对抗样本,可以多次重复以上步骤,每次使用更新后的输入样本重新计算梯度和改变输入样本。 7. 验证对抗样本:最后,使用修改后的输入样本对原始模型进行测试,观察对抗样本的效果。你可以查看模型对对抗样本的预测结果是否发生了变化,以及对抗样本是否能够欺骗模型。 需要注意的是,FGM方法是一种基本的对抗样本生成技术,还有其他更高级的方法可以使用,比如PGD(Projected Gradient Descent)等。这些方法可以提供更强的攻击性能和对抗鲁棒性。
### 回答1: CIFAR-10是一个常用的图像分类数据集,包含了来自10个不同类别的60000张32x32像素图像。对抗攻击是指通过对输入的图像应用微小的、人眼几乎看不出的修改,来欺骗图像分类模型的行为。下面是关于CIFAR-10对抗攻击代码的介绍。 CIFAR-10对抗攻击代码涉及到对输入图像进行扰动,使其在经过分类模型识别时出现错误的分类结果。这种对抗性攻击可以通过不同方法实现,其中较为常用的方法是基于梯度的攻击方法。 在代码实现中,首先需要加载CIFAR-10数据集和分类模型。然后,通过对输入图像施加微小的扰动,可以采用FGSM(Fast Gradient Sign Method)或PGD(Projected Gradient Descent)等梯度攻击算法。这些算法会根据输入图像的梯度信息,生成一个扰动向量,将其加到原始图像上,继而生成一个对抗样本。扰动向量的大小通常会限制在对抗攻击不易被察觉的范围内。 对抗样本生成后,可以将其输入到CIFAR-10分类模型进行分类,评估对抗样本的攻击效果。代码可以输出攻击成功的比例或分类精度下降的程度,来衡量对抗攻击的有效性。此外,还可以通过绘制对抗样本与原始图像的对比图,直观地展示分类模型对对抗样本的误判情况。 对抗攻击代码的实现过程中,需要仔细选择攻击算法和设置扰动向量的大小,以平衡攻击效果和对抗样本的可接受性。同时,还需要考虑与训练阶段的模型鲁棒性的关联,以提高分类模型对对抗攻击的鲁棒性。 总之,CIFAR-10对抗攻击代码实现了一种通过对输入图像进行微小扰动,欺骗分类模型的攻击方法。通过合理选择攻击算法和评估指标,可以为图像分类模型的鲁棒性评估和安全性研究提供重要参考。 ### 回答2: cifar-10对抗攻击代码是一种用于对抗深度学习模型的攻击方法,针对CIFAR-10数据集进行实施。CIFAR-10数据集是一个包含10个不同类别的图像数据集,用于进行图像分类任务的训练和评估。 在对抗攻击中,攻击者试图通过对输入图像进行微小的、不可察觉的扰动,使得深度学习模型的分类结果发生错误,从而欺骗模型。对此,研究人员提出了多种不同的对抗攻击算法。 CIFAR-10对抗攻击代码通常包括以下几个步骤: 1. 导入必要的库和模块,包括深度学习模型、图像处理函数等。 2. 加载并预处理CIFAR-10数据集,包括对图像进行标准化、归一化等操作。 3. 创建一个深度学习模型,可以是基于卷积神经网络(CNN)的分类器。 4. 定义对抗攻击函数,这个函数会根据给定的输入图像和目标标签生成对抗样本,通过在输入图像上添加微小的扰动实现。 5. 实施对抗攻击,即对训练集中的图像样本进行遍历,使用对抗攻击函数生成对抗样本,并将其输入深度学习模型进行分类。 6. 评估对抗攻击的成功率,即统计对抗样本的分类准确率和模型的鲁棒性。 CIFAR-10对抗攻击代码的目的是帮助研究人员理解深度学习模型对抗攻击的脆弱性,并提供评估模型鲁棒性的工具。这些代码还可以用于对抗样本的生成和识别的研究,以加强深度学习模型的安全性和稳定性。 ### 回答3: CIFAR-10对抗攻击代码是一种用于对抗深度学习模型的图像分类任务的代码。CIFAR-10数据集是一个包含了10个不同类别的6万张32*32像素彩色图片的数据集。对抗攻击正是通过对这些图片进行干扰,使得模型对图片的分类产生错误。 在CIFAR-10对抗攻击代码中,常用的方法之一是通过添加一些特定的噪声或扰动来改变原始图片,使得模型对这些改变后的图片的分类结果产生误判。这种方法被称为扰动攻击。 对抗攻击的代码实现通常使用深度学习框架如TensorFlow或PyTorch。首先,需要加载训练好的模型,该模型用于对图片进行分类。然后,通过对原始图片进行修改,添加特定的扰动来生成对抗样本。这些扰动可以是像素级的噪声,也可以是某些具有视觉难度的图案。 在生成对抗样本后,可以使用同样的模型对这些对抗样本进行分类,观察分类结果的变化。如果原始样本被成功误判为其他类别,说明对抗攻击是有效的。 CIFAR-10对抗攻击代码的实现还可以采用其他方法,如生成对抗网络(GANs)或优化算法,以更好地生成对抗样本。此外,还可以使用一些对抗训练的方法来提高模型的对抗鲁棒性,防止模型受到对抗攻击的影响。 总而言之,CIFAR-10对抗攻击代码是一种用于对抗深度学习模型的图像分类任务的代码。它通过修改原始图片,生成特定的对抗样本来欺骗模型的分类结果。这种代码实现可以通过添加扰动、使用生成对抗网络或优化算法来进行。同时,对抗训练也是提高模型对抗鲁棒性的一种方法。
### 回答1: 我不是一个python程序员,但是我可以告诉你,为了使用PGD攻击已经训练完成的模型,你需要编写一些python代码。你需要使用PGD算法,并定义攻击参数,以及迭代次数,并且还需要添加一些正则化项来抑制攻击性。 ### 回答2: PGD(Projected Gradient Descent)攻击是一种常见的针对深度学习模型的对抗攻击方法。它通过利用梯度信息在模型已完成训练后对输入样本进行修改,从而产生对抗样本,以欺骗模型的分类结果。 下面是一个使用PGD攻击已经训练完成的模型的Python代码示例: python import torch import torch.nn as nn # 定义已训练完成的模型 class Model(nn.Module): def __init__(self): super(Model, self).__init__() self.fc = nn.Linear(10, 2) # 假设模型为一个简单的全连接网络 def forward(self, x): return self.fc(x) # 定义PGD攻击函数 def pgd_attack(model, x, y, epsilon, alpha, num_iters): delta = torch.zeros_like(x, requires_grad=True) for t in range(num_iters): loss = nn.CrossEntropyLoss()(model(x + delta), y) loss.backward() delta.data = (delta + alpha * delta.grad.detach().sign()).clamp(-epsilon, epsilon) delta.grad.zero_() x_adv = x + delta.detach() return x_adv # 示例代码 x = torch.zeros(1, 10) # 输入样本 y = torch.tensor([0]) # 正确类别 epsilon = 0.1 # 扰动幅度 alpha = 0.01 # 步长 num_iters = 10 # 迭代次数 model = Model() # 初始化模型 x_adv = pgd_attack(model, x, y, epsilon, alpha, num_iters) # 使用PGD攻击生成对抗样本 # 输出对抗样本 print("对抗样本:", x_adv) 以上代码中,首先定义了一个已经训练完成的简单全连接网络模型Model,其中forward函数定义了前向传播过程。然后,定义了pgd_attack函数,该函数接收模型、输入样本、正确类别、扰动幅度、步长和迭代次数作为参数,使用PGD攻击算法生成对抗样本。在示例代码中,初始化了一个输入样本x和正确类别y,并设置了扰动幅度、步长和迭代次数的值。最后,调用pgd_attack函数生成对抗样本,并输出结果。 请注意代码中的模型和参数设置是示例,并非真实训练的模型和参数。在实际使用PGD攻击时,需要根据具体的模型和任务进行适当的调整。
### 回答1: 我可以提供一些参考代码:import torch from torch.optim import SGDmodel = torch.load(‘pretrained_model.pth’) # 加载预训练模型# 创建 PGD 攻击 attack = PGD(model, epsilon=0.3, iterations=20)# 获取输入和标签 x, y = data# 基于 PGD 攻击求解梯度 x_adv = attack(x, y)# 将攻击后的样本输入模型 model.predict(x_adv) ### 回答2: PGD(Projected Gradient Descent,投影梯度下降)方法是一种对抗性攻击方式,用于攻击机器学习模型。下面给出一个使用Python编写的PGD攻击预训练模型的例子: python import torch import torch.nn as nn import torch.optim as optim # 定义预训练模型 class PretrainedModel(nn.Module): def __init__(self): super(PretrainedModel, self).__init__() self.fc = nn.Linear(10, 2) # 假设模型是一个线性分类器 def forward(self, x): x = self.fc(x) return x # 定义PGD攻击方法 def pgd_attack(model, data, target, epsilon, alpha, iters): perturbed_data = data.clone().detach().requires_grad_(True) for i in range(iters): output = model(perturbed_data) loss = nn.CrossEntropyLoss()(output, target) model.zero_grad() loss.backward() perturbed_data_grad = perturbed_data.grad.data perturbed_data = perturbed_data + alpha * perturbed_data_grad.sign() perturbed_data = torch.clamp(perturbed_data, data - epsilon, data + epsilon) perturbed_data = torch.clamp(perturbed_data, 0, 1) return perturbed_data.detach() # 测试PGD攻击 data = torch.tensor([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]], dtype=torch.float32) target = torch.tensor([0], dtype=torch.long) model = PretrainedModel() epsilon = 0.3 # 扰动范围 alpha = 0.01 # 扰动步长 iters = 40 # 迭代次数 perturbed_data = pgd_attack(model, data, target, epsilon, alpha, iters) print("原始数据:", data) print("扰动后的数据:", perturbed_data) 以上代码中,我们首先定义了一个简单的预训练模型PretrainedModel,然后定义了pgd_attack函数实现PGD攻击。在pgd_attack函数中,我们通过对输入数据进行扰动,得到模型所预测的目标类别的输出,并计算损失函数。然后使用反向传播计算梯度,按梯度方向更新输入数据,重复进行一定次数的迭代,最终得到经过PGD攻击后的数据。 通过运行以上代码,可以得到原始数据和PGD攻击后的扰动数据。请注意,以上代码是一个简化的示例,实际使用时可能需要根据不同的预训练模型和攻击目标做相应的修改和调整。

最新推荐

稀疏编码公式推导:LASSO,ISTA,近端梯度优化,软阈值

稀疏编码中涉及到的: LASSO,近端梯度优化(PGD),迭代软阈值算法(ISTA),L-Lipschitz条件,软阈值的公式推导

高层住宅应急照明系统方案.dwg

高层住宅应急照明系统方案.dwg

代码随想录最新第三版-最强八股文

这份PDF就是最强⼋股⽂! 1. C++ C++基础、C++ STL、C++泛型编程、C++11新特性、《Effective STL》 2. Java Java基础、Java内存模型、Java面向对象、Java集合体系、接口、Lambda表达式、类加载机制、内部类、代理类、Java并发、JVM、Java后端编译、Spring 3. Go defer底层原理、goroutine、select实现机制 4. 算法学习 数组、链表、回溯算法、贪心算法、动态规划、二叉树、排序算法、数据结构 5. 计算机基础 操作系统、数据库、计算机网络、设计模式、Linux、计算机系统 6. 前端学习 浏览器、JavaScript、CSS、HTML、React、VUE 7. 面经分享 字节、美团Java面、百度、京东、暑期实习...... 8. 编程常识 9. 问答精华 10.总结与经验分享 ......

低秩谱网络对齐的研究

6190低秩谱网络对齐0HudaNassar计算机科学系,普渡大学,印第安纳州西拉法叶,美国hnassar@purdue.edu0NateVeldt数学系,普渡大学,印第安纳州西拉法叶,美国lveldt@purdue.edu0Shahin Mohammadi CSAILMIT & BroadInstitute,马萨诸塞州剑桥市,美国mohammadi@broadinstitute.org0AnanthGrama计算机科学系,普渡大学,印第安纳州西拉法叶,美国ayg@cs.purdue.edu0David F.Gleich计算机科学系,普渡大学,印第安纳州西拉法叶,美国dgleich@purdue.edu0摘要0网络对齐或图匹配是在网络去匿名化和生物信息学中应用的经典问题,存在着各种各样的算法,但对于所有算法来说,一个具有挑战性的情况是在没有任何关于哪些节点可能匹配良好的信息的情况下对齐两个网络。在这种情况下,绝大多数有原则的算法在图的大小上要求二次内存。我们展示了一种方法——最近提出的并且在理论上有基础的EigenAlig

怎么查看测试集和训练集标签是否一致

### 回答1: 要检查测试集和训练集的标签是否一致,可以按照以下步骤进行操作: 1. 首先,加载训练集和测试集的数据。 2. 然后,查看训练集和测试集的标签分布情况,可以使用可视化工具,例如matplotlib或seaborn。 3. 比较训练集和测试集的标签分布,确保它们的比例是相似的。如果训练集和测试集的标签比例差异很大,那么模型在测试集上的表现可能会很差。 4. 如果发现训练集和测试集的标签分布不一致,可以考虑重新划分数据集,或者使用一些数据增强或样本平衡技术来使它们更加均衡。 ### 回答2: 要查看测试集和训练集标签是否一致,可以通过以下方法进行比较和验证。 首先,

数据结构1800试题.pdf

你还在苦苦寻找数据结构的题目吗?这里刚刚上传了一份数据结构共1800道试题,轻松解决期末挂科的难题。不信?你下载看看,这里是纯题目,你下载了再来私信我答案。按数据结构教材分章节,每一章节都有选择题、或有判断题、填空题、算法设计题及应用题,题型丰富多样,共五种类型题目。本学期已过去一半,相信你数据结构叶已经学得差不多了,是时候拿题来练练手了,如果你考研,更需要这份1800道题来巩固自己的基础及攻克重点难点。现在下载,不早不晚,越往后拖,越到后面,你身边的人就越卷,甚至卷得达到你无法想象的程度。我也是曾经遇到过这样的人,学习,练题,就要趁现在,不然到时你都不知道要刷数据结构题好还是高数、工数、大英,或是算法题?学完理论要及时巩固知识内容才是王道!记住!!!下载了来要答案(v:zywcv1220)。

PixieDust:静态依赖跟踪实现的增量用户界面渲染

7210PixieDust:通过静态依赖跟踪进行声明性增量用户界面渲染0Nick tenVeen荷兰代尔夫特理工大学,代尔夫特,荷兰n.tenveen@student.tudelft.nl0Daco C.Harkes荷兰代尔夫特理工大学,代尔夫特,荷兰d.c.harkes@tudelft.nl0EelcoVisser荷兰代尔夫特理工大学,代尔夫特,荷兰e.visser@tudelft.nl0摘要0现代Web应用程序是交互式的。反应式编程语言和库是声明性指定这些交互式应用程序的最先进方法。然而,使用这些方法编写的程序由于效率原因包含容易出错的样板代码。在本文中,我们介绍了PixieDust,一种用于基于浏览器的应用程序的声明性用户界面语言。PixieDust使用静态依赖分析在运行时增量更新浏览器DOM,无需样板代码。我们证明PixieDust中的应用程序包含的样板代码比最先进的方法少,同时实现了相当的性能。0ACM参考格式:Nick ten Veen,Daco C. Harkes和EelcoVisser。2018。通过�

pyqt5 QCalendarWidget的事件

### 回答1: PyQt5中的QCalendarWidget控件支持以下事件: 1. selectionChanged:当用户选择日期时触发该事件。 2. activated:当用户双击日期或按Enter键时触发该事件。 3. clicked:当用户单击日期时触发该事件。 4. currentPageChanged:当用户导航到日历的不同页面时触发该事件。 5. customContextMenuRequested:当用户右键单击日历时触发该事件。 您可以使用QCalendarWidget的connect方法将这些事件与自定义槽函数连接起来。例如,以下代码演示了如何将selectionC

TFT屏幕-ILI9486数据手册带命令标签版.pdf

ILI9486手册 官方手册 ILI9486 is a 262,144-color single-chip SoC driver for a-Si TFT liquid crystal display with resolution of 320RGBx480 dots, comprising a 960-channel source driver, a 480-channel gate driver, 345,600bytes GRAM for graphic data of 320RGBx480 dots, and power supply circuit. The ILI9486 supports parallel CPU 8-/9-/16-/18-bit data bus interface and 3-/4-line serial peripheral interfaces (SPI). The ILI9486 is also compliant with RGB (16-/18-bit) data bus for video image display. For high speed serial interface, the ILI9486 also provides one data and clock lane and supports up to 500Mbps on MIPI DSI link. And also support MDDI interface.

"FAUST领域特定音频DSP语言编译为WebAssembly"

7010FAUST领域特定音频DSP语言编译为WebAssembly0Stéphane LetzGRAME,法国letz@grame.fr0Yann OrlareyGRAME,法国orlarey@grame.fr0Dominique FoberGRAME,法国fober@grame.fr0摘要0本文演示了如何使用FAUST,一种用于声音合成和音频处理的函数式编程语言,开发用于Web的高效音频代码。在简要介绍语言,编译器和允许将同一程序部署为各种目标的体系结构系统之后,将解释生成WebAssembly代码和部署专门的WebAudio节点。将呈现几个用例。进行了广泛的基准测试,以比较相同一组DSP的本机和WebAssembly版本的性能,并进行了评论。0CCS概念0•应用计算→声音和音乐计算;•软件及其工程→功能语言;数据流语言;编译器;领域特定语言;0关键词0信号处理;领域特定语言;音频;Faust;DSP;编译;WebAssembly;WebAudio0ACM参考格式:Stéphane Letz,Yann Orlarey和DominiqueFober。2018年。FAUST领域特定音频