I am clear on how to get various layer information via iterating:
for child, name in zip(model.children(), model.named_children()):
print(child, name, type(child), name[0])
etc.
And I am clear on how to get the number of parameters and their values via:
for layer in model.parameters():
print(layer.data.size())
In a sequential model, the connection sizes will be equal to the layer parameters in their corresponding connected dimension.
But what I am not clear on is how to find the name and sizes of the next connected layers in a non-sequential model.
For instance, suppose we have the following dummy model with a split connection:
import torch
import torch.nn as nn
class Split_Model(nn.Module):
def __init__(self):
super(Split_Model, self).__init__()
self.fc1 = nn.Linear(1, 20)
self.fc2a = nn.Linear(10, 10)
self.fc2b = nn.Linear(10, 10)
self.fc3 = nn.Linear(20, 1)
def forward(self, x):
x = self.fc1(x)
y, x = x[:, :10], x[:, 10:20]
x = self.fc2a(x)
y = self.fc2b(y)
x = torch.cat([x, y], dim=1)
x = self.fc3(x)
return x
model= Split_Model()
Split connections are becoming more useful as they better interconnect a model and eliminate vanishing gradients in very long models. How would I be able to find the next layers in the graph that fc1 are connected to? Let’s say I wanted something like:
print(model.fc1.???)
>>> fc2a: 10 , fc2b: 10 #something like this is what I would ideally like for an output
How would I get this information out of a defined model with split connections?
Thank you!