【问题标题】:Expanding dimension from 3D to 4D using None使用 None 将维度从 3D 扩展到 4D
【发布时间】:2020-03-07 13:39:26
【问题描述】:

我正在尝试创建一个 CNN 来解决问题。我提供的第一层的 input_shape 是 (20, 196, 1)。

但是,当我执行model.summary() 时,我得到的维度为 (None, 20, 196, 1),而我的 X 是维度 (20, 196, 1) 的特征列表。在执行model.fit() 时出现此错误 -

检查输入时出错:预期 input_1 有 4 个维度,但是 得到形状为 (20, 196, 1) 的数组。

谁能指出我做错了什么?另外,如果我想将维度从 (20, 196, 1) 增加到 (None, 20, 196, 1),我该怎么办?

【问题讨论】:

  • 你能分享你的代码的sn-p吗?这将使问题更容易理解
  • 这还有问题吗? :)
  • 一点也不。谢谢你。更新的答案解决了我的问题。
  • 请问您能接受这个答案吗? :)

标签: tensorflow machine-learning keras neural-network conv-neural-network


【解决方案1】:

第一个轴应始终对应于批量大小。 例如,考虑您的批次中可能需要 N 个元素的情况。每个元素由维度为 (20, 196, 1) 的输入特征组成。现在,您的批次将具有 (N, 20, 196, 1) 的大小。

一个选项是在第一个轴上堆叠样本:首先,创建一个样本列表,然后将其分配给输入数据。例如:

# list of samples with size (20, 196, 1)
list_of_samples = [x1, x2, x3, .. xn]

# your input data would be:
input_batch = np.array(list_of_samples)

否则,如果您的样本 xi 已经是张量,另一种可能性是将它们堆叠在第一个轴上:

# given xi = tensor with shape (20, 196, 1), for i = 1, 2,..., N
input_batch = tf.stack([x1, x2, x3, ..., xn], axis=0)
# input_batch has now shape (N, 20, 196, 1)

【讨论】:

  • 所以我需要将我的训练集中的样本数添加为第一维?假设我有 10 个样本要训练模型,所以我的张量变为 (10, 20, 196, 1)。对吗?
  • 完全正确:那么您可以为模型提供形状数组 (10, 20, 196, 1)
  • 你能建议如何在扩展维度时指定这 10 吗?例如,如果我使用 np.expand_dims(X, axis=0),它只会添加一个维度 (1, 20, 196, 1)。我如何制作它(10、20、196、1)?
猜你喜欢
  • 2016-05-08
  • 2018-10-26
  • 1970-01-01
  • 2016-03-25
  • 2022-07-08
  • 1970-01-01
  • 2021-02-10
  • 2019-01-08
  • 1970-01-01
相关资源
最近更新 更多