class DeepNeuralNet(torch.nn.Module): def __init__(self, n_users, n_items, n_factors=32, hidden_layers=[64,32]): super(DeepNeuralNet, self).__init__() # User and item embeddings self.user_embedding = torch.nn.Embedding(num_embeddings=n_users, embedding_dim=n_factors) self.item_embedding = torch.nn.Embedding(num_embeddings=n_items, embedding_dim=n_factors) # Fully connected hidden layers self.fc_layers = torch.nn.ModuleList([]) if len(hidden_layers) > 0: self.fc_layers.append(torch.nn.Linear(in_features=n_factors*2, out_features=hidden_layers[0])) for i in range(1,len(hidden_layers)): self.fc_layers.append(torch.nn.Linear(in_features=hidden_layers[i-1], out_features=hidden_layers[i])) self.output_layer = torch.nn.Linear(in_features=hidden_layers[-1] if len(hidden_layers)> 0 else n_factors*2, out_features=1) self.dropout = torch.nn.Dropout(0.2) self.sigmoid = torch.nn.Sigmoid()用图像展示这个网络层
时间: 2024-04-23 20:23:34 浏览: 102
以下是 DeepNeuralNet 类的网络结构图,根据上面的描述进行绘制:
```
+-----------------+ +-----------------+
| User Embeddings | | Item Embeddings |
+-----------------+ +-----------------+
| |
| |
v v
+----------------+ +----------------+
| Concatenate | | Concatenate |
| Layer | | Layer |
+----------------+ +----------------+
| |
| |
v v
+-----------+ +-----------+ +-----------+
| Linear(64) | | Linear(32) | | Linear(1) |
+-----------+ +-----------+ +-----------+
| | |
| | |
v v v
+-----------+ +-----------+ +-----------+
| Dropout | | Dropout | | Sigmoid |
| Layer | | Layer | | Activation|
+-----------+ +-----------+ +-----------+
```
其中,左侧两个矩形表示用户和项目嵌入层,右侧两个矩形表示全连接层,中间的圆圈表示连接层和激活函数。连接线表示信息流动的方向,从左到右。每个矩形上方标注了它的名称,下方标注了其输入输出特征的数量。具体来说:
- 用户和项目嵌入层是两个单独的 Embedding 层,分别表示用户和项目的嵌入。
- 连接层将用户和项目嵌入连接在一起,形成一个大小为(batch_size, n_factors*2)的张量。
- 两个全连接层分别是大小为64和32的线性层,表示网络的两个隐藏层。这些层的输入特征数量为连接层的输出特征数量(n_factors*2),输出特征数量为层的大小。这些线性层以 ModuleList 的形式存储在 fc_layers 中。
- 输出层是一个大小为1的线性层,其输入特征数量为最后一个隐藏层的大小,或者如果没有隐藏层,则为连接层的输出特征数量(n_factors*2)。输出特征数量为1,用于预测评分或二进制结果。
- Dropout 层以概率0.2随机删除一些神经元,以防止过拟合。
- Sigmoid 激活函数将输出值压缩在0和1之间,用于预测二进制结果。
阅读全文