我已经用DNA序列和它的表达值运行了CNN模型。然而,模型的预测范围是在一定的基因表达值,如图1所示。我的问题是,1)如果我设置不同的超参数(当前学习率= 1 e-5,epoch = 500),预测的结果会改善吗?2)使用更深层的训练是明智的吗?如果是这样,有什么经验法则吗?3)训练数据不平衡(图2),是否建议在训练前对数据进行归一化?
以下是我从medium引用的CNN模型:
class DNA_CNN(nn.Module):
def __init__(self,
seq_len,
num_filters=32,
kernel_size=3):
super().__init__()
self.seq_len = seq_len
self.conv_net = nn.Sequential(
# 4 is for the 4 nucleotides
nn.Conv1d(4, num_filters, kernel_size=kernel_size),
nn.ReLU(inplace=True),
nn.Flatten(),
nn.Linear(num_filters*(seq_len-kernel_size+1), 1),
)
def forward(self, xb):
# reshape view to batch_size x 4channel x seq_len
# permute to put channel in correct order
xb = xb.permute(0,2,1)
#print(xb.shape)
out = self.conv_net(xb)
return out
# __FOOTNOTE 1__
字符串
图一
x1c 0d1x的数据
图2.国际货币基金组织
的
- 基因表达值以tpm测量
1条答案
按热度按时间qoefvg9y1#
首先,如果log值在[-10,10]之间正态分布,如图所示,则应考虑在模型中传递
log(X) / 5.0
而不是X
,以在一个小区间内以规则间隔的值汇总信息。它将极大地帮助您的模型处理数据。ML模型无法在不调用log的情况下同时处理1000和0.0001这样的值。在第二次,如果你的模型继续总是预测相同的值,最好通过添加一个或两个层来增加复杂性。您还应该增加内核大小,并且可以考虑1-D池,特别是如果您有大型序列,以便增加模型末尾每个元素所查看的元素范围,并获得更好的序列表示。