1.infoGAN
通常、私たちが学習する特徴は混在しています。上図に示すように、これらの特徴はデータ空間内で複雑かつ順序性のない方法でエンコードされますが、これらの特徴が分解可能であれば、これらの特徴はより解釈しやすくなります。 、これらの機能をコーディングに活用するのが簡単になります。では、教師なし学習を通じてこれらの分解可能な特徴をどのように取得するのでしょうか?
先人たちは、多くの教師ありおよび教師なしの方法を通じて分解可能な特徴も学習しました。この論文では、教師なし学習は、連続および離散潜在因子を使用して分解可能な特徴を学習します。
2. 特徴量の切り離し:
実際の状況では特徴量は非常に乱雑ですが、特徴量の関係が比較的すっきりしていて明確であることが望まれます。どの列が何を表しているかが明確であるため、制御が容易になります。infogan の目的は、これらの混沌とした特徴を明確にし、正規化することです。
機能の切り離しの例:
特定の機能を制御するニューロンを見つけて、その値を変更して特定の機能を変更できます。3.x.detach()は、Pytorch の x.data() と x.detach() の違い
から取得されます。ブロック勾配の戻り値。x.data() または x.detach() はどちらも同じテンソルを返します。データを x として扱います。そして、この Tensor は元の Tensor とメモリを共有します。一方が変更されると、もう一方も変更され、新しい tensor の require_grad = Falseインスタンスになります。
class TestDetach(nn.Module):
def __init__(self, InDim, HiddenDim, OutDim):
super().__init__()
self.layer1 = nn.Linear(InDim, HiddenDim, False)
self.layer2 = nn.Linear(HiddenDim, OutDim, False)
def forward(self, x, DetachLayer1):
x = torch.relu(self.layer1(x))
x = x.detach()
# x = x.data()
x = self.layer2(x)
return x
2 層線形層、最初の層の出力が切り離されると、最初の層のパラメータは決して更新されません
4.torch.cumprod()
累積積は累積乗算を意味します
例:
import torch
x = torch.Tensor([1, 2, 3, 4, 5])
y = torch.cumprod(x, dim = 0)
print(y)
テンソル([ 1., 2., 6., 24., 120.])
5np.random.seed(0) は同じ乱数を生成できます。
これは戻り値のない関数であり、乱数関数を初期化するために使用されます。Seed() の括弧内にパラメータを追加できます。このパラメータは乱数を生成する基準になります。パラメータを追加しない場合、基準はシステム時刻になります。パラメータが変更されない場合、乱数の生成は行われます。数値に一貫性があり、実験の再現が容易になります。
つまり、seed(x) を使用する場合、x が変化しない限り、このランダム シーケンスは決して変化しません。
各呼び出しにはシード(0)が必要であり、これはシードが同じであることを意味します
。
import numpy as np
np.random.seed(0)
x = np.random.randn(2,2)
np.random.seed(0)
y = np.random.randn(2,2)
print(x)
print(y)
[[1.76405235 0.40015721]
[0.97873798 2.2408932 ]]
[[1.76405235 0.40015721]
[0.97873798 2.2408932 ]]
import numpy as np
np.random.seed(1)
x = np.random.randn(2,2)
np.random.seed(0)
y = np.random.randn(2,2)
np.random.seed(1)# z同x
z = np.random.randn(2,2)
print(x)
print(y)
print(z)
[[ 1.62434536 -0.61175641]
[-0.52817175 -1.07296862]]
[[1.76405235 0.40015721]
[0.97873798 2.2408932 ]]
[[ 1.62434536 -0.61175641 ]
[-0.52817175 -1.07296862]]
6.plt.scatterの使用法
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
x = np.random.rand(20)#x坐标
y = np.random.rand(20)#y坐标
colors = np.random.rand(20)
area = (50 * np.random.rand(20)) ** 2#面积
print("area",area)
plt.scatter(x, y, s=area, c=colors, alpha=0.5)
plt.show()