Tensorflow 卷积神经网络(CNN)输入形状

Tensorflow 卷积神经网络(CNN)输入形状,tensorflow,keras,deep-learning,conv-neural-network,Tensorflow,Keras,Deep Learning,Conv Neural Network,我是CNN的新手,我有一个关于CNN的问题。我对CNN(特别是Keras)的输入形状有点困惑。 我的数据是不同时间段的2D数据(比如10X10)。因此,我有3D数据。 我将把这些数据输入到我的模型中,以预测未来的时隙。因此,我将有一定数量的预测时隙(假设10个时隙,到目前为止,我可能有一个10x10的数据)。 现在,我的问题是,我必须将这些数据处理为10个通道的2D图像(如CNN、RGB图像中的普通数据)或3D数据。(Keras中的conv2D或conv3D) 提前感谢您的帮助。对于您的情况,C

我是CNN的新手,我有一个关于CNN的问题。我对CNN(特别是Keras)的输入形状有点困惑。 我的数据是不同时间段的2D数据(比如10X10)。因此,我有3D数据。 我将把这些数据输入到我的模型中,以预测未来的时隙。因此,我将有一定数量的预测时隙(假设10个时隙,到目前为止,我可能有一个10x10的数据)。 现在,我的问题是,我必须将这些数据处理为10个通道的2D图像(如CNN、RGB图像中的普通数据)或3D数据。(Keras中的conv2D或conv3D)


提前感谢您的帮助。

对于您的情况,
Conv2D
将非常有用。请参考以下说明,了解使用
Conv2D
了解卷积神经网络(CNN)的输入形状

让我们看看输入形状是什么样子。CNN的输入数据如下图所示。我们假设我们的数据是一组图像

输入形状有
(批次大小、高度、宽度、通道)
。在
RGB
的情况下,图像的通道将为
3
,而
greyscale
图像的通道将为
1

让我们看看下面的代码

import tensorflow as tf
from tensorflow.keras.layers import Conv2D

model=tf.keras.models.Sequential()
model.add(Conv2D(filters=64, kernel_size=1, input_shape=(10,10,3)))
model.summary()
输出:

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 10, 10, 64)        256       
=================================================================
Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (16, 10, 10, 64)          256       
=================================================================
虽然看起来输入形状是
3D
,但在拟合数据时必须传递
4D
数组,该数组应类似
(批量大小,10,10,3)
。由于input_shape参数中没有批大小值,因此在拟合数据时,我们可以使用任何批大小

输出形状为
(无、10、10、64)
。第一个维度表示批次大小,目前为
None
。因为网络事先不知道批量大小

注意:
一旦拟合数据,
将替换为拟合数据时给出的批量大小

让我们看看另一个具有批量大小的代码

    import tensorflow as tf
    from tensorflow.keras.layers import Conv2D

    model=tf.keras.models.Sequential()
    model.add(Conv2D(filters=64, kernel_size=1, batch_input_shape=(16,10,10,3)))
    model.summary()
输出:

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 10, 10, 64)        256       
=================================================================
Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (16, 10, 10, 64)          256       
=================================================================

在这里,我将
input\u-shape
参数替换为
batch\u-input\u-shape
。顾名思义,此参数将提前询问批量大小,在拟合数据时,您不能提供任何其他批量大小。

您最好尝试seq2seq或rnn网络,而不是简单的cnn。我认为seq2seq或rnn在我的情况下不起作用。我更喜欢CNN或CNN-LSTM。谢谢。因为您的数据似乎只有一个颜色通道(不是RGB,只是10×10像素),所以我认为Conv2D应该足够了。如果将颜色通道数设置为1,我认为Conv2D操作实际上可能与Conv3D层执行的操作相同。非常感谢!“这很有帮助。”哈米德,如果我回答了你的问题,你能接受答案并投票表决吗。非常感谢。