U Ph@sddlmZddlmZddlZddlZddlmZddl m Z m Z ddl m Z mZddlmZddlmZmZGdd d ejZdS) ) annotations)SequenceN) Convolution ResidualUnit)ActNorm)Reshape) ensure_tupleensure_tuple_repc sneZdZdZddejejddfddddddd d d d fd d Zdddd ddddZ dddddZ Z S) GeneratoraV Defines a simple generator network accepting a latent vector and through a sequence of convolution layers constructs an output tensor of greater size and high dimensionality. The method `_get_layer` is used to create each of these layers, override this method to define layers beyond the default :py:class:`monai.networks.blocks.Convolution` or :py:class:`monai.networks.blocks.ResidualUnit` layers. The layers are constructed using the values in the `channels` and `strides` arguments, the number being defined by the length of these (which must match). Input is first passed through a :py:class:`torch.nn.Linear` layer to convert the input vector to an image tensor with dimensions `start_shape`. This passes through the convolution layers and is progressively upsampled if the `strides` values are greater than 1 using transpose convolutions. The size of the final output is defined by the `start_shape` dimension and the amount of upsampling done through strides. In the default definition the size of the output's spatial dimensions will be that of `start_shape` multiplied by the product of `strides`, thus the example network below upsamples an starting size of (64, 8, 8) to (1, 64, 64) since its `strides` are (2, 2, 2). Args: latent_shape: tuple of integers stating the dimension of the input latent vector (minus batch dimension) start_shape: tuple of integers stating the dimension of the tensor to pass to convolution subnetwork channels: tuple of integers stating the output channels of each convolutional layer strides: tuple of integers stating the stride (upscale factor) of each convolutional layer kernel_size: integer or tuple of integers stating size of convolutional kernels num_res_units: integer stating number of convolutions in residual units, 0 means no residual units act: name or type defining activation layers norm: name or type defining normalization layers dropout: optional float value in range [0, 1] stating dropout probability for layers, None for no dropout bias: boolean stating if convolution layers should have a bias component Examples:: # 3 layers, latent input vector of shape (42, 24), output volume of shape (1, 64, 64) net = Generator((42, 24), (64, 8, 8), (32, 16, 1), (2, 2, 2)) NTz Sequence[int]zSequence[int] | intintz float | NoneboolNone) latent_shape start_shapechannelsstrides kernel_size num_res_unitsdropoutbiasreturnc stt|^|_|_t|j|_t||_t||_t||_ t ||j|_ ||_ ||_ ||_| |_| |_t|_ttt|jtt||_t||_t|_|j} tt||D]B\} \} }| t|dk}|| | ||}|j d| || } qdS)Nzlayer_%i)!super__init__r in_channelsrlen dimensionsrrrr rractnormrrnnFlattenflattenLinearrnpprodlinearrreshape Sequentialconv enumeratezip _get_layer add_module)selfrrrrrrr r!rrZechannelicsis_lastlayer __class__R/home/dell461/cl/sdc2/HISourceFinder-master-l/src/monai/networks/nets/generator.pyr=s,      $  zGenerator.__init__zConvolution | nn.Sequential)r out_channelsrr4rc Csxt||d|p|jdk|j||j|j|j|j|jd }|jdkrtt||j||j||j|j|j|j|jd }t ||}|S)ad Returns a layer accepting inputs with `in_channels` number of channels and producing outputs of `out_channels` number of channels. The `strides` indicates upsampling factor, ie. transpose convolutional stride. If `is_last` is True this is the final layer and is not expected to include activation and normalization layers. Tr) rr is_transposed conv_only spatial_dimsr:rr r!rr) rsubunitslast_conv_onlyr=r:rr r!rr) rrrrr r!rrrr"r*)r0rr:rr4r5rur8r8r9r.gs8    zGenerator._get_layerz torch.Tensor)xrcCs,||}||}||}||}|S)N)r$r(r)r+)r0rAr8r8r9forwards     zGenerator.forward) __name__ __module__ __qualname____doc__rPRELUrINSTANCErr.rB __classcell__r8r8r6r9r s($*+r ) __future__rcollections.abcrnumpyr&torchtorch.nnr"Zmonai.networks.blocksrrmonai.networks.layers.factoriesrrZ"monai.networks.layers.simplelayersr monai.utilsr r Moduler r8r8r8r9 s