/// <summary>チャネルごとの3次元逆畳み込み</summary> public static VariableNode ChannelwiseDeconvolution3D(VariableNode x, VariableNode w, int stride, Shape outshape = null) { if (outshape == null) { int outwidth = (x.Shape.Width - 1) * stride + w.Shape.Width; int outheight = (x.Shape.Height - 1) * stride + w.Shape.Height; int outdepth = (x.Shape.Depth - 1) * stride + w.Shape.Depth; outshape = Shape.Map3D(w.Shape.InChannels, outwidth, outheight, outdepth, x.Shape.Batch); } Function function = new Functions.Connection3D.ChannelwiseDeconvolution(outshape, w.Shape, stride); VariableNode y = Apply(function, x, w)[0]; return y; }
/// <summary>チャネルごとの3次元逆畳み込み</summary> public static Tensor ChannelwiseDeconvolution3D(Tensor x, Tensor w, int stride, Shape outshape = null) { if (outshape == null) { int outwidth = (x.Shape.Width - 1) * stride + w.Shape.Width; int outheight = (x.Shape.Height - 1) * stride + w.Shape.Height; int outdepth = (x.Shape.Depth - 1) * stride + w.Shape.Depth; outshape = Shape.Map3D(w.Shape.InChannels, outwidth, outheight, outdepth, x.Shape.Batch); } Functions.Connection3D.ChannelwiseDeconvolution function = new Functions.Connection3D.ChannelwiseDeconvolution(outshape, w.Shape, stride); Tensor y = new Tensor(function.OutShape); function.Execute(new Tensor[] { x, w }, new Tensor[] { y }); return y; }