python - 使用 Conv1D 层时出现 ValueError
问题描述
我试图了解如何使用 Conv1D 层从向量中提取特征。这是我的代码:
import tensorflow as tf
from tensorflow.keras import models, layers
import numpy as np
# make 100 40000-dimensional vectors:
x = []
for i in range(100):
array_of_random_floats = np.random.random_sample((40000))
x.append(array_of_random_floats)
x = np.asarray(x)
# make 100 80000-dimensional vectors:
y = []
for i in range(100):
array_of_random_floats = np.random.random_sample((80000))
y.append(array_of_random_floats)
y = np.asarray(y)
model = models.Sequential([
layers.Input((40000,)),
layers.Conv1D(padding='same', kernel_initializer='Orthogonal', filters=16, kernel_size=16, activation=None, strides=2),
# ...
layers.Dense(80000)
])
model.compile(loss='mse', optimizer='adam', metrics=['accuracy'])
history = model.fit(x=x,
y=y,
epochs=100)
这会产生以下错误:
ValueError: Input 0 of layer conv1d_20 is incompatible with the layer: : expected min_ndim=3, found ndim=2. Full shape received: (None, 40000)
我有点困惑,因为 Conv1D 层的文档似乎表明它可以处理向量......
解决方案
看来这只是您的尺寸错误。我发现如果您在 Conv1D 图层中指定输入形状并展开x
尺寸,它会起作用。
model = models.Sequential([
layers.Conv1D(..., input_shape=(None, 40000)),
# ...
layers.Dense(80000)
])
和
history = model.fit(x=np.expand_dims(x, 1), y=y, epochs=100)
推荐阅读
- jmeter - JMeter 的 Taurus YAML 运行时属性更改
- javascript - Firestore - 如何在我的州添加文档 ID 及其数据?
- bash - 写入输出流并从 shell 脚本函数返回值
- postgresql - postgresql 函数在声明附近有语法错误?
- c# - 命令设计模式 - 执行带有返回值的方法
- windows-subsystem-for-linux - (启动时出现 WSL 错误)按任意键继续
- c# - 如何使用 ASP.NET 样板实现多个通知程序?
- git - go-git 将文件报告为 Untracked 而它应该是 Unmodified
- c - gcc 打开 -O3 会导致 128 位整数出现错误
- c - 我目前正在使用 PSoC 5LP。我想从 Psoc 5Lp 的 EEPROM 的第一行读取 8 字节的 HexaDecimal 数据