输入矩阵中行和列之间的差异

时间:2019-11-07 00:43:50

标签: input keras deep-learning bioinformatics

作为我的硕士论文的一部分,我正在尝试构建基因表达自动编码器。我的教授建议我从小做起-取一个样本基因表达的1个时间点,并建立一个可以用较少信息表示它的网络(然后将其扩展到时间序列并进行一些实验)。

所以我有19040个基因(或特征)和1个样本的1个时间点,需要输入自动编码器。根据theacher的说法,我的输出层也应该是19040。

我应该输入什么样的input_shape?

  1. 输入(shape =(1,19040))
  2. 输入(shape =(19040,1))
  3. Input(shape =(19040,))

在我的示例中1和2之间有区别吗?

data  = pd.read_csv(filename, delimiter='\t', header=0)

data3d = array(data).reshape(5,19040,11)

x_train = keras.backend.transpose(data3d[0:1,:,1:2])

x = Dense(19040,activation = 'linear')(input_data)

encoded = Dense(10, activation='relu')(x)

decoded = Dense(19040, activation = 'linear')(encoded)

autoencoder = Model(input_data, decoded)

编辑:

部分数据 Data looks like this:

前19040行是1个样本,然后新的行以相同的EntrezID(基因ID)开头,我在数据集中总共有5个样本和10个时间点。

1 个答案:

答案 0 :(得分:2)

我相信解决您问题的正确方法是选择(1):

Input(shape=(1,19040))

Keras模型未在体系结构规范中指定样本尺寸-这是从实际数据集中推论得出的。因此,如果我了解您的情况,则您的输入数据将具有以下一般形式:

(num_samples,num_time_steps,num_features)

但现在,num_samples = 1,num_time_steps = 1和num_features = 19040与前面提到的选择(1)一致。

当您推广到更多时间步长时,您将更改为

Input(shape=(num_time_steps,19040))

关于问题的第二部分,我相信选项(1)和(2)之间的区别在于,在选项(1)的每个时间步上,每个要素都将紧密地连接到每个输出节点,其中在选择(2)中,每个时间步都是连接到每个节点的单个功能。

我希望这会有所帮助。