Python 3.x keras中卷积神经网络的conv3d输入

Python 3.x keras中卷积神经网络的conv3d输入,python-3.x,keras,deep-learning,Python 3.x,Keras,Deep Learning,我正在实现一个卷积神经网络。我有一个大小为(500201,7,4,1)的矩阵,其中500是批量大小,201是第一维,7是第二维,4是第三维。1只是通道,因为CONV3D接受5D张量作为输入。我的特征是三维的,因此我总共有4个特征。我将第三维中的值标准化,使值介于0和1之间 起初我想做一个Conv2D,但后来我的过滤器会浏览第一维度和第二维度,而不是第三维度的特征。因此,我决定改用conv3D我的第一个问题是,在这里使用conv3D有意义吗? 我的输出为形状(500,4)。这就是我希望我的网络预测

我正在实现一个卷积神经网络。我有一个大小为(500201,7,4,1)的矩阵,其中500是批量大小,201是第一维,7是第二维,4是第三维。1只是通道,因为CONV3D接受5D张量作为输入。我的特征是三维的,因此我总共有4个特征。我将第三维中的值标准化,使值介于0和1之间

起初我想做一个Conv2D,但后来我的过滤器会浏览第一维度和第二维度,而不是第三维度的特征。因此,我决定改用conv3D我的第一个问题是,在这里使用conv3D有意义吗?

我的输出为形状(500,4)。这就是我希望我的网络预测频率的每个特性。所以我用的是均方误差。它是有效的。但我的问题是,对于每个输出,我最多有两个特性的值,其他两个特性的值为零。对于非零特性,一个特性的频率非常高,另一个特性的频率非常低所以我的下一个问题是使用均方误差有意义吗?如果不是,那么考虑到一个频率高,另一个频率低,我应该使用哪种损耗。

到目前为止,我的代码是:

i1 = Input(shape=(201,7, 4,1))
c1 = Conv3D(128, kernel_size=(9,10,4),activation='relu',padding='same')(i1)

c1 = MaxPooling3D(2)(c1)

c1 = Conv3D(128, kernel_size=(5,10,4),activation='relu',padding='same')(c1)
c1 = Conv3D(128, kernel_size=(5,10,4),activation='relu',padding='same')(c1)
c1 = MaxPooling3D(2)(c1)

c = Flatten()(c1)

x = Dense(128, activation='relu')(c)
x = Dense(128, activation='relu')(c)
output = Dense(4,activation = 'linear')(x)

model = Model([i1], [output])

model.summary()

sgd = SGD(lr=0.01)
model.compile(loss='mean_squared_error',optimizer=sgd,metrics=['accuracy'])
当我运行代码时,我得到了0.16的验证损失,但我的准确率保持在36%。我试着改变学习速度,但没用。我也使用了ADAM Optimizer,但也没用。我试着增加滤波器尺寸,滤波器数量,但精度保持在36%,这就是为什么我觉得这可能是因为对于给定的输入,一个特征的一个地面真实频率和另一个特征的另一个地面真实频率较低,而另外两个特征为零

如有见解,将不胜感激