Keras卷积神经网络维度问题

时间:2018-10-11 21:43:45

标签: python keras conv-neural-network

我对从3-D矩阵转换为1-D矩阵感兴趣。 1000行,4列,16个样本至16个样本中有1of4种疾病。

我回想矩阵代数:AX + B = Y 在这种情况下,说B = 0,Y = 16x1 那么,AX的尺寸如何以这种方式计算出来?我可以在Y的哪一层使用最终得到4个类别的16x1尺寸?

我会以这样的形状启动卷积网络吗?

conv2D(过滤器,内核,input_shape =(16,1000,4))

我如何以一个给我4个类别(即density(4))的图层结束它? 请举个例子。

谢谢。

1 个答案:

答案 0 :(得分:0)

我真的很难理解您的问题。您是说您的输入是一个1000维的特征向量,总共有16个维,而网络输出(即目标)是四种可能的疾病之一?

在这种情况下,您会误解CNN的输入形状,该形状未考虑其批量大小(您可以使用不同的批量大小,因此我们希望将此参数与模型分离)。

根据您对1000像素特征的理解,您需要在将特征归一化到模型之前应用一些特征归一化。

from keras.layers import *
from keras.models import Model

# 1. define model parameters
# 1.1 dropout rate, you may want to use 0 first
dropout_rate = 0.2 
# 1.2 mlp structure
fc_nodes = [128, 32, 8] 
# activation, e.g. relu or tanh
activation = 'relu' 

# 2. define model
# 2.1 define input
# note: batch_size=16 is NOT included in shape
feat_in = Input(shape=(1000,), name='feat_in')
# 2.2 define body
x = feat_in
for idx, nb_nodes in enumerate( fc_nodes ) :
    x = Dense( nb_nodes, activation=activation, name='fc-{}'.format(idx) )(x)
    if ( dropout_rate > 0 ) :
        x = Dropout( dropout_rate, name='dropout-{}'.format(idx))(x)
# 2.3 define output
pred_out = Dense( 4, activation='softmax', name='pred_out')(x)
# 2.4 define model
model = Model( inputs=feat_in, outputs=pred_out, name='my_model')

# 3. display model architecture
print model.summary()

此模型将采用形状为(batch_size, 1000)的2D张量,并预测形状为(batch_size, 4)的2D张量。

顺便说一句,Conv2D仅在您输入的图像类似图片时才使用,而不是这种情况。