作为我的硕士论文的一部分,我正在尝试构建基因表达自动编码器。我的教授建议我从小做起-取一个样本基因表达的1个时间点,并建立一个可以用较少信息表示它的网络(然后将其扩展到时间序列并进行一些实验)。
所以我有19040个基因(或特征)和1个样本的1个时间点,需要输入自动编码器。根据theacher的说法,我的输出层也应该是19040。
我应该输入什么样的input_shape?
在我的示例中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)
编辑:
前19040行是1个样本,然后新的行以相同的EntrezID(基因ID)开头,我在数据集中总共有5个样本和10个时间点。
答案 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)中,每个时间步都是连接到每个节点的单个功能。
我希望这会有所帮助。