Anacondaのダウンロード
Anacondaは、Pythonの機械学習や科学計算などに特化した、パッケージや環境を管理するためのシステムです。簡単にPythonの開発環境を管理でき、パッケージがインストールしやすいと言うメリットがあります。
まずは、以下のリンクから自分のOSに合ったAnacondaのインストーラーをダウンロードしましょう。
ダウンロードが完了したら、インストーラーをクリックしてインストールを行ってください。
Anaconda Prompt で環境の構築
Pythonのインストールが完了したら、開発環境を作成します。Anacondaがダウンロードされるとbase環境のみ存在している状態です。そこで、任意の名前を付けた目的に都合のいいパッケージを搭載した環境を構築すると便利です。自分の場合はphysと言う名前の環境を構築し、ディープラーニングなどを行っています。
それでは、検索バーに Anaconda Prompt と入力して、Anaconda Prompt を起動してください。
まずは、環境構築
conda create -n phys
アクティベート
conda activate phys
ライブラリを探しやすくするためのチャンネル追加する。
conda config –add channels conda-forge
conda config –add channels pytorch
conda config –add channels nvidia
conda config –add channels rusty1s
数値計算系、物理シミュレーション系、ディープラーニング系のライブラリを入れたいが、依存関係が少ないライブラリからインストールしていく方がよい。
基本ライブラリ
conda install pip numpy scipy sympy pandas matplotlib seaborn plotly tqdm
機械学習ライブラリ
conda install scikit-learn xgboost lightgbm
PyTorchライブラリ
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
PyTorchの拡張
conda install torch-geometric -c rusty1s -c conda-forge
計算系ライブラリ
conda install optuna transformers quimb qutip -c conda-forge
可視化ライブラリ
conda install -c conda-forge plotnine holoviews -c conda-forge
Spyder用のカーネルでスパイダーに認識させる
conda install spyder-kernels=2.5
Spyderの設定
Spyderを開く→ツール → 設定→Pythonインタープリタ→
C:/Users/takur/anaconda3/envs/phys/python.exe
適用→
上記の設定が終了すれば、一度Spiderを閉じて開き直せば構築した環境を読み込んでくれる。
学習のテスト
せっかくディープラーニングの環境を構築したので以下のコードをSpyderにコピペしてみてください。
import torch
import networkx as nx
import matplotlib.pyplot as plt
from torch_geometric.data import Data
from torch_geometric.nn import GCNConv
from sklearn.manifold import TSNE
# 1.量子もつれネットワークの作成
edge_index = torch.tensor([[0, 1, 2, 3, 4, 0, 2, 3],
[1, 2, 3, 4, 0, 2, 3, 4]], dtype=torch.long)
edge_attr = torch.tensor([0.8, 0.5, 0.6, 0.7, 0.9, 0.4, 0.3, 0.6], dtype=torch.float)
# 5ノード, 3次元の初期特徴量
x = torch.rand((5, 3))
# PyTorch Geometric の Data オブジェクト
data = Data(x=x, edge_index=edge_index, edge_attr=edge_attr)
# 2.GNN モデルの定義
class GNN(torch.nn.Module):
def __init__(self):
super().__init__()
self.conv1 = GCNConv(3, 4) # 入力3次元 → 隠れ層4次元
self.conv2 = GCNConv(4, 2) # 隠れ層4次元 → 出力2次元(埋め込み)
def forward(self, x, edge_index):
x = self.conv1(x, edge_index).relu()
x = self.conv2(x, edge_index)
return x
model = GNN()
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
# 3.GNN の学習
for epoch in range(100):
optimizer.zero_grad()
out = model(data.x, data.edge_index)
loss = torch.norm(out) # 仮の損失関数(最適化のため)
loss.backward()
optimizer.step()
# 埋め込みベクトルの出力
print("GNN 埋め込みベクトル:")
print(out.detach().numpy())
# 4.量子もつれネットワークの可視化
G = nx.Graph()
for i in range(edge_index.shape[1]):
G.add_edge(int(edge_index[0, i]), int(edge_index[1, i]), weight=float(edge_attr[i]))
plt.figure(figsize=(5, 5))
pos = nx.spring_layout(G)
edges = G.edges(data=True)
weights = [d["weight"] for (u, v, d) in edges]
nx.draw(G, pos, with_labels=True, node_color='lightblue', edge_color=weights, edge_cmap=plt.cm.Blues, width=2)
plt.title("量子もつれネットワーク")
plt.show()
# 5.学習後の埋め込みを可視化
# t-SNE の perplexity をサンプル数未満に設定
tsne = TSNE(n_components=2, perplexity=3, random_state=42) # perplexity はサンプル数未満に
node_embeddings_2d = tsne.fit_transform(out.detach().numpy())
plt.figure(figsize=(5, 5))
plt.scatter(node_embeddings_2d[:, 0], node_embeddings_2d[:, 1], c='red')
for i, txt in enumerate(range(5)):
plt.annotate(txt, (node_embeddings_2d[i, 0], node_embeddings_2d[i, 1]))
plt.title("GNN 学習後のノード埋め込み")
plt.show()
このプログラムの意味はは、量子もつれのネットワーク構造を グラフニューラルネットワーク(GNN) を使って学習し、その結果から時空の幾何構造を再構築しようという試みです。量子もつれの情報が時空の曲率や距離に関与しているという仮説に基づいて、量子力学と重力の統一を目指した最前線の研究に関連しています。
つまり、量子もつれが持つ構造的な情報を使って、時空の性質を学習し、理論的な枠組みの中で時空の再構築を試みるモデルを構築する試みです。
上手くプログラムが起動すれば、学習結果とグラフが出るはずです。
コメント