基于tensorflow和tensorflow-quantum的量子机器学习环境搭建, Mac环境下

news2024/10/2 12:31:49

量子神经网络(Quantum neural networks, QNN)及其变体量子卷积神经网络(Quantum convolutional networks, QCNN),在内存和速度方面都有着高效的优势,能将经典向量由n维编码到log2^n个量子位,同时量子具有多个状态进行并行叠加运算。
这里给出一个经典结构的量子神经网络模型,如下图所示:
在这里插入图片描述
结构类似一个全连接神经网络,特征映射当作输入层进行量子态的准备,量子变换作为隐藏层将经典信息变换为量子信息,量子测量和输出相当于全连接神经网络的输出层。θ作为权重在优化器优化后进行更新。

本次搭建使用到的软件为:Anaconda、JupterNotebook
在Anaconda中新建环境为tensorflowq,选择Python版本为3.8.16,在终端激活环境:
在这里插入图片描述

把路径换到我们新建的环境,然后输入

pip install tensorflow==2.7.0

下载2.7.0版本的tensorflow,这里我已经下载过了,得到结果:
在这里插入图片描述
安装成功!下面安装要用到的quantum库,输入

pip install tensorflow-quantum==0.7.2

输入pip list查看安装好的库,安装成功:
在这里插入图片描述

下面找到官网:https://tensorflow.google.cn/quantum/tutorials/hello_many_worlds 给出的案例hello_many_world
复制代码到JupyterNotebook中:

import cirq
import sympy
import numpy as np
# visualization tools
import matplotlib.pyplot as plt
from cirq.contrib.svg import SVGCircuit
a, b = sympy.symbols('a b')
# 创建两个量子比特
q0, q1 = cirq.GridQubit.rect(1, 2)

# 使用上面创建的参数在这些量子位上创建一个电路。
circuit = cirq.Circuit(
    cirq.rx(a).on(q0),
    cirq.ry(b).on(q1), cirq.CNOT(control=q0, target=q1))

SVGCircuit(circuit)

使用设置的参数得到一个二量子电路:
在这里插入图片描述
在pycharm下调试代码观察参数内容如下:
在这里插入图片描述
可以使用criq评估电路,使用特定的数字替换电路中的自由参数对象,下面计算参数化电路的原始状态向量输出:

# 计算 a = 0.5和 b = -0.5的状态向量。
resolver = cirq.ParamResolver({a: 0.5, b: -0.5})
output_state_vector = cirq.Simulator().simulate(circuit, resolver).final_state_vector

在这里插入图片描述得到量子的四个状态向量,这里用复数表示,由于状态向量在模拟之外不能直接访问。实际中需要指定一个度量值,它将状态向量转换为经典计算机能够理解的实数。如下代码:

z0 = cirq.Z(q0)
qubit_map={q0: 0, q1: 1}
z_real = z0.expectation_from_state_vector(output_state_vector, qubit_map).real
print(z_real)

得到结果如下:

在这里插入图片描述

z0x1 = 0.5 * z0 + cirq.X(q1)

z0x1.expectation_from_state_vector(output_state_vector, qubit_map).real

得到结果如下:
在这里插入图片描述
TensorFlow Quantum提供了将criq对象转化为张量的函数,这使得可以将criq对象发送到量子层并进行量子操作,具体操作如下,该函数可以在Criq Circuit和Cirq Paulis的列表或数组上调用:

# 一阶张量包含一个电路
circuit_tensor = tfq.convert_to_tensor([circuit])
print(circuit_tensor.shape)
print(circuit_tensor.dtype)

在这里插入图片描述
将criq对象编码为tf.string张量,并根据需要进行解码:

# 包含两个泡利算子的一阶张量
pauli_tensor = tfq.convert_to_tensor([z0, z0x1])
pauli_tensor.shape

在这里插入图片描述
计算期望值的最高级接口是tfq.layers.Expectation层,即tf.keras.Layer。以最简单的形式,该层相当于在cirq.ParamResolvers上模拟参数化电路;然而,TFQ允许按照TensorFlow语义进行批处理,并使用高效的C++代码模拟电路。

下面创造一批值来代替a和b参数。

batch_vals = np.array(np.random.uniform(0, 2 * np.pi, (5, 2)), dtype=float)

在Cirq中对参数值进行电路执行需要一个循环:

cirq_results = []
cirq_simulator = cirq.Simulator()

for vals in batch_vals:
    resolver = cirq.ParamResolver({a: vals[0], b: vals[1]})
    final_state_vector = cirq_simulator.simulate(circuit, resolver).final_state_vector
    cirq_results.append(
        [z0.expectation_from_state_vector(final_state_vector, {
            q0: 0,
            q1: 1
        }).real])

print('cirq batch results: \n {}'.format(np.array(cirq_results)))

结果如下:
在这里插入图片描述
在TFQ中简化了相同的操作:

tfq.layers.Expectation()(circuit,
                         symbol_names=[a, b],
                         symbol_values=batch_vals,
                         operators=z0)

结果如下:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分子生物学 第四章 DNA的生物合成

文章目录第四章 DNA的生物合成第一节 DNA复制的一般特征1 DNA的半保留复制2 DNA的双向复制3 DNA的半不连续复制第二节 DNA复制的酶学1 DNA聚合酶1.1 原核生物DNA pol1.1.1 DNA pol I1.2 DNA pol II1.3 DNA pol III1.4 其它的DNA pol1.2 真核生物DNA聚合酶1.2.1 DNA pol α\alph…

深度学习基础入门篇[五]:交叉熵损失函数、MSE、CTC损失适用于字识别语音等序列问题、Balanced L1 Loss适用于目标检测

1.交叉熵损失函数 在物理学中,“熵”被用来表示热力学系统所呈现的无序程度。香农将这一概念引入信息论领域,提出了“信息熵”概念,通过对数函数来测量信息的不确定性。交叉熵(cross entropy)是信息论中的重要概念&am…

ITIL社群的内容及作用

官方网站 www.itilzj.com 文档资料: wenku.itilzj.com ITIL是全球范围内最为流行的IT服务管理框架之一,它能够帮助企业提高IT服务质量,提升业务价值。无论你是IT行业的从业者还是对ITIL感兴趣的人士,ITIL之家社群都将为你提供有价值的知识和经…

非关系型数据库---Redis安装与基本使用

一、数据库类型 关系数据库管理系统(RDBMS)非关系数据库管理系统(NoSQL) 按照预先设置的组织机构,将数据存储在物理介质上(即:硬盘上) 数据之间可以做无关联操作 (例如: 多表查询,嵌套查询,外键等) 主流的RDBMS软件:My…

java io流 概念 详解

IO流 当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作。 当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作。 因此我们把这种输入和输出动作称为IO操作。 学习目标: 一、文件类&#x…

张程伟:从开源项目到企业级数据库,云和恩墨 MogDB Uqbar 的技术探索与实践...

导语4月8日下午,为期两天的第十二届数据技术嘉年华(DTC 2023)在北京新云南皇冠假日酒店圆满落下帷幕。大会以“开源融合数字化——引领数据技术发展,释放数据要素价值”为主题,汇聚产学研各界精英到场交流。作为大会的…

电蚊拍欧盟CE认证EMC+LVD测试

电蚊拍(Mosquito),主要由高频振荡电路、三倍压整流电路和高压电击网DW三部分组成。工作中,经升压电路在双层电网间产生1850V直流左右的高压电,两电网间的静电场有较强的吸附力,当蚊蝇等害虫接近电网时&…

系统集成路由器OSPF动态、综合路由配置

实验任务:动态路由协议RIP、OSPF协议的内容和特点动态路由RIP、OSPF实验,建立拓扑pc1>>R1>>R2>>R3>>pc2,使pc1与pc2能相互通信,并配置PC端静默接口。熟悉配置vlan间路由技术:多层交换机虚拟接…

落地“旅游+”数字赋能:实现智慧旅游协同创新发展

经济的蓬勃发展,与之带来的是消费水平的不断提升,旅行已经成为我们日常生活中不可缺少的一项。在过去三年间,我们由于或这或那的原因,并无法真正实现一场说走就走的旅程。大家在过去的三年算是憋狠了,所以在今年&#…

计算专题(小计算题)

考点: 1.沟通渠道的总量为 n*(n-1)/2,其中 n 代表干系人的数量。 2.决策树计算/自制和外购决策-----EMV。 3.盈亏平衡计算。(刚好不亏也不赚) 【案例】假设某IT服务企业,其固定成本为30万元,每项服务的变…

用于测试FDIA在现实约束下可行性的FDIA建模框架(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 信息通信技术的发展和智能设备的引入使电力系统逐渐演变为电力信息物理系统,而信息层与物理层之间的深度耦合也加剧…

HashMap死循环详解

目录 一、数据插入原理 二、导致死循环的原因 三、解决方案 一、数据插入原理 由于JDK1.7中,HashMap的底层存储结构采用的是数组链表的方法 插入数据时候采用的是头插法 二、导致死循环的原因 此时线程T1,T2节点同时指向A节点,同时线程T1…

Spring Boot 整合 Swagger 教程详解

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

小白必看,吐血整理Facebook新手指南(二)

上篇文章咱们讲了关于FB广告的类型,今天咱们再来详细讲下如何设置FB广告、注意事项以及如何借助强大的工具(SaleSmartly、ss客服)监控广告效果、承接广告流量。话不多说,直接上干货选择你的目标 首先,前往您的广告管理…

虚拟化服务器和普通服务器的区别

随着云计算技术的快速普及,虚拟化技术作为其中的一项核心技术,也越来越受到了企业和个人用户的关注。虚拟化服务器相较于传统的物理服务器,具备更高的灵活性和可扩展性,但同时也存在一些不足之处。那么虚拟化服务器的优缺点有哪些…

[STM32F103C8T6]基于stm32的循迹,跟随,避障智能小车

目录 1.小车驱动主要是通过L9110S模块来驱动电机 motor.c 2.我们可以加入串口控制电机驱动(重写串口接收回调函数,和重定向printf) Uart.c main.c 3.点动功能 uart.c main.c 为什么使用的是HAL_Delay()要设置滴答定时器的中断优先级呢? 4.小车…

如何在 Mac上运行 Windows程序?

在Mac 上运行 Windows的工具 在 Mac 上运行 Windows-无需重启即可在您的 Intel 或 Apple M 系列 Mac 上运行 Windows的工具来了,非常强悍和使用,有需要的朋友可以参考一下。 主要功能 运行快速、操作简单、功能强大的应用程序,无需重启即可在您的 Intel 或 Apple M 系列 M…

基于 VITA57.1 的 2 路 125MSPS AD 采集、2 路 250MSPS DA 回放 FMC 子卡模块

板卡概述 FMC150_V30 是一款基于 VITA57.1 规范的 2 路 125MSPS 采样率 16 位分辨率 AD 采集、2 路 250MSPS 采样率 16 位分辨率 DA 回放 FMC 子卡模块。该模块遵循 VITA57.1 规范,可直接与符合 VITA57.1 规范的 FPGA 载卡配合使用,板卡 ADC 器件采用 AD…

接口自动化两大神器:正则提取器和jsonpath提取器

一、前言 在开展接口测试的过程中,我们会发现很多接口需要依赖前面的接口,需要我们动态从前面的接口返回中提取数据,也就是我们通常说的关联。 关联通俗来讲就是把上一次请求的返回内容中的部分截取出来保存为参数,用来传递给下…

迅为龙芯2K0500全国产开发板

目录 龙芯2K0500处理器 动态电源管理 低功耗技术 产品开发更快捷 全国产设计方案 2K0500核心板 邮票孔连接 丰富接口 高扩展性 系统全开源 品质保障 行业应用 龙芯2K0500处理器 迅为iTOP-LS2K0500开发采用龙芯LS2K0500处理器,基于龙芯自主指令系统&#x…