如何为多维数组创建 conv1d

How to create a conv1d for an array of multiple dimensions

这是我的问题:

假设我正在研究癌细胞, 为简化起见,假设我正在观察 1 个肿瘤。 每个肿瘤都会有它的平均超大细胞率,平均异常形状细胞率 我正在使用 12 个月内每月一次的数据 我在想的是每个肿瘤都有一个元组数组:

[(0.2,0.3),(0.3,0.3)..until I have 12]

这是这个问题的一些示例代码:

dataset = []

for i in range(1000):
    train = []
    for j in range(0,12):
        train.append((np.random.rand(),np.random.rand()))
    dataset.append(train)

model = keras.Sequential([
        layers.Conv1D(filters=4, kernel_size=2, activation='relu',input_shape=tf.shape(dataset[0])),
        layers.Dense(64, activation='relu'),
        layers.Dense(1)])


model.predict(dataset)

当我尝试执行 model.predict() 时,我得到:

Negative dimension size caused by subtracting 2 from 1 for  '{{node conv1d/conv1d}} = Conv2D[T=DT_FLOAT, data_format="NHWC", dilations=[1, 1, 1, 1], explicit_paddings=[], padding="VALID", strides=[1, 1, 1, 1], use_cudnn_on_gpu=true](conv1d/conv1d/ExpandDims, conv1d/conv1d/ExpandDims_1)' with input shapes: [?,1,1,2], [1,2,2,4].

你知道我做错了什么吗?我尝试查看 tf 和 keras 文档并可以构建基本的感知器,但也许我不应该使用元组数组并使用其他东西。有什么想法吗?

keras/tensorflow 不处理元组数据格式。 keras 接受的最简单的数据格式是 numpy 数组。按照您的代码片段,这只是强加

dataset = []

for i in range(1000):
    train = []
    for j in range(0,12):
        train.append([np.random.rand(), np.random.rand(), np.random.rand()]) # don't use tuple
    dataset.append(train)
    
dataset = np.asarray(dataset) # convert to numpy array
print(dataset.shape)

model = Sequential([
        layers.Conv1D(filters=4, kernel_size=2, activation='relu',
               input_shape=dataset.shape[1:]),
        layers.Dense(64, activation='relu'),
        layers.Dense(1)])

model.predict(dataset).shape