Pytoch巻き込み中のInput Shapeの使い方
まずPytouchの中の巻き込みを見ます。
class toch.nn.C.onv 2 d(in_チャンネル,out_chanels、ケネル_size、stride=1、padding=0、dilation=1、groups=1、bias=True)
二次元巻積層で入力するスケールは(N,C_)です。n,H,W),出力スケール(N,C_out,H_out,W_out)の計算方式
ここで変なのはこの畳み込み層がinput shopを定義していないことです。入力サイズは明らかです。in,H,W)ですが、定義にはインチングのみが必要です。chanelのsizeで、畳み込みができますが、このように任意sizeのイメージでも畳めますか?
そして次のような実験を行いました。
入力:
input=touch.randn(1,1,32,32)
out put=Net(input)
大丈夫です
input=touch.randn(1,1,64,64)
out put=Net(input)
出現:mismatch Error
私たちは畳み込みモデルの部分を見てみます。
input:(1,1,32,32)>>conv 1(1,6,5)>(1,6,28,28)--max_pool 1(2,2)-(1,6,14,14)->conv 2(6,16,5)-(1,16,10,10)->max_pool 2(2,2)-』(1,16,5,5)
そして、全接続ネットワークとしての入力です。Linearはtenssor flowの中のDenseに相当します。ですから、入力サイズが(32,32)ではない場合、最終的にはfeature map shop shareが巻かれています。(None,16,5,5)ではなく、最初のLinear層の入力は(None,16*5*5)ですので、mismatch Errorが現れます。
なぜこのような問題があるのかというと、kers modelはInput shopを定義しなければならないのに対し、pytouchはもっとプロセス化された操作のようで、具体的には官ネットカフェを見ます。
知識を補充します:pytouchはグループを巻いて畳み込みますと深さは畳みます
まず、pytouchの二次元の畳み込みの操作APIを見にきます。
今続けていくつかの畳み込みはどうやって操作しますか?
一.普通の巻き込み
toch.nn.C.onv 2 d(in_チャンネル,out_chanels、ケネル_size、stride=1、padding=0、dilation=1、groups=1、bias=True)
一般的な畳み込み時groupはデフォルトでは1 dilation=1(ここではまずdilationを議論しない)の残りが正常であれば、Nx in_と入力します。chanel x high x width
出力はN x out_chanel x higxwidth.具体的な数字を入力してください。64チャネルの特徴図を入力して、32チャネルの特徴図を出力します。32チャネルの特徴図を得るには32種類の異なる畳み込み核が必要です。
つまり上から入ってきたパラメータout_です。チャンネル。具体的にはどのようにして得られたかを説明しますと、各畳み込み核会と64種類の異なる特徴図について順次畳み込みを行います。例えば、畳み込み核の大きさは3 x 3サイズです。畳み込み値が共有されているため、入力された特徴図を畳む時は3 x 3つのパラメータしかありません。先ほど説明した第一の畳み込み核と入力の第一の特徴図は畳み込まれてから引き続き後の第二、第三、……64の異なる特徴図は順次畳み込みます。最後のパラメータは3 x 3 x 64です。
この時出力は特徴図です。今は一つの積込核しか使っていません。一つの核はそれぞれの部分の小さい窓の中で64個の特徴図と畳み込んで64個の数を得るべきで、最後に64個の数を足すと一つの数を得ることができます。つまり特徴図を出力してそのウィンドウの値に対応して、順番に窓をスライドさせて完全な特徴図を得ることができます。
前にはこれだけ多くの種類の巻込み核が使われていますが、現在は順次32種類の異なる畳み込み核を使って出力される32チャンネルの特徴図を類推しています。最終パラメータは64 x 3 x 3 x 32です。
二.グループ畳込み
パラメータgroup=1の場合は、通常の畳み込みと同じです。現在、group=4なら、入力特徴図と出力特徴図は4の倍数でなければならないという前提があります。今はどうやって操作しているのか見てみます。同前チャンネル64は4つのグループに分かれています。out_。inchannel(32種の核)も4つのグループに分けられて、上の普通のロールに順次対応して、最終的に各グループから出力される8つの特徴図を順次concatします。結果のout_です。チャンネル
三.深さの畳み込みdepthwise
この時group=in_chanleとは、各入力の特徴図に対してそれぞれ異なる畳み込み核で畳むことです。out_chanelは必ずin_でなければなりませんチャンネルの整数倍。
3.1 k=1の場合、out_chanel=in_channelは、それぞれの巻き取り核と入力された各チャネルを畳み込み、最後にconcatで起きる。パラメータの合計は3 x 3 x 64です。このとき、畳み込みが終わったら、次の64個の1 x 1サイズの畳み込み核があります。Googleが2017年のCVPRで論文「Xception:deep learning with depthwise separable convolutions」に提出した仕組みです。下の図
上の図は1 x 1をdepthwiseの前に置いていますが、原理は同じです。最終パラメータの個数は64 x 1 x 1+64 x 3 x 3です。パラメータは、一般的な畳み込み方法より小さい必要があります。64 x 3 x 3 x 64
3.2 kが1より大きい整数の場合、例えばk=2
このとき、各入力の特徴図はk個の畳み込み核に対応してk特徴図を生成し、最終的に生成される特徴マップの個数はkである。×同前チャンネル
以上のPytouchの巻き込みの中のInput Shapeの使い方は小编で皆さんに提供した内容の全部です。参考にしていただければと思います。どうぞよろしくお愿いします。
class toch.nn.C.onv 2 d(in_チャンネル,out_chanels、ケネル_size、stride=1、padding=0、dilation=1、groups=1、bias=True)
二次元巻積層で入力するスケールは(N,C_)です。n,H,W),出力スケール(N,C_out,H_out,W_out)の計算方式
ここで変なのはこの畳み込み層がinput shopを定義していないことです。入力サイズは明らかです。in,H,W)ですが、定義にはインチングのみが必要です。chanelのsizeで、畳み込みができますが、このように任意sizeのイメージでも畳めますか?
そして次のような実験を行いました。
import torch
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
# channel:1; channel:6;5x5
self.conv1 = nn.Conv2d(1, 6, 5)
self.conv2 = nn.Conv2d(6, 16, 5)
# an affine operation: y = Wx + b
self.fc1 = nn.Linear(16 * 5 * 5, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)
def forward(self, x):
# 2x2 Max pooling
x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
# If the size is a square you can only specify a single number
x = F.max_pool2d(F.relu(self.conv2(x)), 2)
x = x.view(-1, self.num_flat_features(x))
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x
def num_flat_features(self, x):
size = x.size()[1:] #
num_features = 1
for s in size:
num_features *= s
return num_features
net = Net()
print(net)
出力
Net(
(conv1): Conv2d(1, 6, kernel_size=(5, 5), stride=(1, 1))
(conv2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))
(fc1): Linear(in_features=400, out_features=120, bias=True)
(fc2): Linear(in_features=120, out_features=84, bias=True)
(fc3): Linear(in_features=84, out_features=10, bias=True)
)
このネットワーク(LeNet)の期待入力は32 x 32で、彼がInput shopやTensorflowのInput層を設置していないのがおかしいです。どうして(H,W)=(32,32)を知っていますか?入力:
input=touch.randn(1,1,32,32)
out put=Net(input)
大丈夫です
input=touch.randn(1,1,64,64)
out put=Net(input)
出現:mismatch Error
私たちは畳み込みモデルの部分を見てみます。
input:(1,1,32,32)>>conv 1(1,6,5)>(1,6,28,28)--max_pool 1(2,2)-(1,6,14,14)->conv 2(6,16,5)-(1,16,10,10)->max_pool 2(2,2)-』(1,16,5,5)
そして、全接続ネットワークとしての入力です。Linearはtenssor flowの中のDenseに相当します。ですから、入力サイズが(32,32)ではない場合、最終的にはfeature map shop shareが巻かれています。(None,16,5,5)ではなく、最初のLinear層の入力は(None,16*5*5)ですので、mismatch Errorが現れます。
なぜこのような問題があるのかというと、kers modelはInput shopを定義しなければならないのに対し、pytouchはもっとプロセス化された操作のようで、具体的には官ネットカフェを見ます。
知識を補充します:pytouchはグループを巻いて畳み込みますと深さは畳みます
まず、pytouchの二次元の畳み込みの操作APIを見にきます。
今続けていくつかの畳み込みはどうやって操作しますか?
一.普通の巻き込み
toch.nn.C.onv 2 d(in_チャンネル,out_chanels、ケネル_size、stride=1、padding=0、dilation=1、groups=1、bias=True)
一般的な畳み込み時groupはデフォルトでは1 dilation=1(ここではまずdilationを議論しない)の残りが正常であれば、Nx in_と入力します。chanel x high x width
出力はN x out_chanel x higxwidth.具体的な数字を入力してください。64チャネルの特徴図を入力して、32チャネルの特徴図を出力します。32チャネルの特徴図を得るには32種類の異なる畳み込み核が必要です。
つまり上から入ってきたパラメータout_です。チャンネル。具体的にはどのようにして得られたかを説明しますと、各畳み込み核会と64種類の異なる特徴図について順次畳み込みを行います。例えば、畳み込み核の大きさは3 x 3サイズです。畳み込み値が共有されているため、入力された特徴図を畳む時は3 x 3つのパラメータしかありません。先ほど説明した第一の畳み込み核と入力の第一の特徴図は畳み込まれてから引き続き後の第二、第三、……64の異なる特徴図は順次畳み込みます。最後のパラメータは3 x 3 x 64です。
この時出力は特徴図です。今は一つの積込核しか使っていません。一つの核はそれぞれの部分の小さい窓の中で64個の特徴図と畳み込んで64個の数を得るべきで、最後に64個の数を足すと一つの数を得ることができます。つまり特徴図を出力してそのウィンドウの値に対応して、順番に窓をスライドさせて完全な特徴図を得ることができます。
前にはこれだけ多くの種類の巻込み核が使われていますが、現在は順次32種類の異なる畳み込み核を使って出力される32チャンネルの特徴図を類推しています。最終パラメータは64 x 3 x 3 x 32です。
二.グループ畳込み
パラメータgroup=1の場合は、通常の畳み込みと同じです。現在、group=4なら、入力特徴図と出力特徴図は4の倍数でなければならないという前提があります。今はどうやって操作しているのか見てみます。同前チャンネル64は4つのグループに分かれています。out_。inchannel(32種の核)も4つのグループに分けられて、上の普通のロールに順次対応して、最終的に各グループから出力される8つの特徴図を順次concatします。結果のout_です。チャンネル
三.深さの畳み込みdepthwise
この時group=in_chanleとは、各入力の特徴図に対してそれぞれ異なる畳み込み核で畳むことです。out_chanelは必ずin_でなければなりませんチャンネルの整数倍。
3.1 k=1の場合、out_chanel=in_channelは、それぞれの巻き取り核と入力された各チャネルを畳み込み、最後にconcatで起きる。パラメータの合計は3 x 3 x 64です。このとき、畳み込みが終わったら、次の64個の1 x 1サイズの畳み込み核があります。Googleが2017年のCVPRで論文「Xception:deep learning with depthwise separable convolutions」に提出した仕組みです。下の図
上の図は1 x 1をdepthwiseの前に置いていますが、原理は同じです。最終パラメータの個数は64 x 1 x 1+64 x 3 x 3です。パラメータは、一般的な畳み込み方法より小さい必要があります。64 x 3 x 3 x 64
3.2 kが1より大きい整数の場合、例えばk=2
このとき、各入力の特徴図はk個の畳み込み核に対応してk特徴図を生成し、最終的に生成される特徴マップの個数はkである。×同前チャンネル
以上のPytouchの巻き込みの中のInput Shapeの使い方は小编で皆さんに提供した内容の全部です。参考にしていただければと思います。どうぞよろしくお愿いします。