Hi,
Let’s say I have a Bi-autoenocder, each stream conducts a standard AE thing.
class BiAutoencoder(nn.Module):
    def __init__(self):
        super(BiAutoencoder, self).__init__()
        self.encoder1 = nn.Sequential(
            nn.Linear(28 * 28, 128),
            nn.ReLU(True),
            nn.Linear(128, 64),
            nn.ReLU(True), nn.Linear(64, 12), nn.ReLU(True), nn.Linear(12, 3))
        self.decoder1 = nn.Sequential(
            nn.Linear(3, 12),
            nn.ReLU(True),
            nn.Linear(12, 64),
            nn.ReLU(True),
            nn.Linear(64, 128),
            nn.ReLU(True), nn.Linear(128, 28 * 28), nn.Tanh())
        self.encoder2 = nn.Sequential(
            nn.Linear(28 * 28, 128),
            nn.ReLU(True),
            nn.Linear(128, 64),
            nn.ReLU(True), nn.Linear(64, 12), nn.ReLU(True), nn.Linear(12, 3))
        self.decoder2 = nn.Sequential(
            nn.Linear(3, 12),
            nn.ReLU(True),
            nn.Linear(12, 64),
            nn.ReLU(True),
            nn.Linear(64, 128),
            nn.ReLU(True), nn.Linear(128, 28 * 28), nn.Tanh())

    def forward(self, x1, x2):
        x1 = self.encoder1(x1)
        x1_hat = self.decoder1(x1)
        x2 = self.encoder2(x2)
        x2_hat = self.decoder2(x2) 
       return x1_hat, x2_hat


Now I want to set a certain probability while training that the outputs of encoders forward through the other decoder.
That is, like 50% chance, the forward pipeline goes normally.
But at 50% chance, the forward would be like this.
    def forward(self, x1, x2):
        x1 = self.encoder1(x1)
        x2_hat = self.decoder2(x1)
        x2 = self.encoder2(x2)
        x1_hat = self.decoder1(x2) 
       return x1_hat, x2_hat

Any suggestion?Thanks.