【发布时间】:2019-06-06 13:30:42
【问题描述】:
我正在尝试使用完全连接的神经网络或多层感知器来执行多类分类:我的训练数据 (X) 是等长的不同 DNA 字符串。这些序列中的每一个都有一个与之关联的浮点值(例如 t_X),我用它来模拟我的数据的标签(y),方法如下。 y ~ np.random.poisson(constant * t_X)。
在训练我的 Keras 模型(请参见下文)后,我制作了预测标签和测试标签的直方图,我面临的问题是我的模型似乎对很多序列进行了错误分类,请参见下面的链接图片。
我的训练数据如下所示:
X , Y
CTATTACCTGCCCACGGTAAAGGCGTTCTGG, 1
TTTCTGCCCGCGGCCTGGCAATTGATACCGC, 6
TTTTTACACGCCTTGCGTAAAGCGGCACGGC, 4
TTGCTGCCTGGCCGATGGTCTATGCCGCTGC, 7
我 one-hot 编码我的 Y 和我的 X 序列被转换为维度的张量:(批量大小、序列长度、字符数),这些数字类似于 10,000 x 50 x 4
我的 keras 模型如下所示:
model = Sequential()
model.add(Flatten())
model.add(Dense(100, activation='relu',input_shape=(50,4)))
model.add(Dropout(0.25))
model.add(Dense(50, activation='relu'))
model.add(Dropout(0.25))
model.add(Dense(len(one_hot_encoded_labels), activation='softmax'))
我尝试了以下不同的损失函数
#model.compile(loss='mean_squared_error',optimizer=Adam(lr=0.00001), metrics=['accuracy'])
#model.compile(loss='mean_squared_error',optimizer=Adam(lr=0.0001), metrics=['mean_absolute_error',r_square])
#model.compile(loss='kullback_leibler_divergence',optimizer=Adam(lr=0.00001), metrics=['categorical_accuracy'])
#model.compile(loss=log_poisson_loss,optimizer=Adam(lr=0.0001), metrics=['categorical_accuracy'])
#model.compile(loss='categorical_crossentropy',optimizer=Adam(lr=0.0001), metrics=['categorical_accuracy'])
model.compile(loss='poisson',optimizer=Adam(lr=0.0001), metrics=['categorical_accuracy'])
损失行为合理;它随着时代的增加而下降并变平。我尝试了不同的学习率、不同的优化器、每层中不同数量的神经元、不同数量的隐藏层和不同类型的正则化。
我认为我的模型总是将大多数预测标签放在测试数据的峰值附近(请参阅链接直方图),但它无法对测试集中计数较少的序列进行分类。这是一个常见的问题吗?
在不使用其他架构(如卷积或循环)的情况下,有人知道我可以如何提高此模型的分类性能吗?
【问题讨论】:
标签: keras neural-network poisson multiclass-classification