【问题标题】:ValueError from Dataset.from_generator in Keras model来自 Keras 模型中 Dataset.from_generator 的 ValueError
【发布时间】:2020-07-26 21:42:33
【问题描述】:

我对 TensorFlow 很陌生,我正在尝试使用 Dataset.from_generator 将视频程序加载到模型中,该模型从生成器内的文件名加载视频。我遇到的问题是这样的:

ValueError: Input 0 of layer sequential is incompatible with the layer: expected ndim=5, found ndim=0. Full shape received: []

我不知道是什么原因造成的。

我的代码如下:

def video_gen():
    inputs = np.array([e.strip().split(" ")[0] for e in label_desc])
    labels = np.array([float(e.strip().split(" ")[1]) for e in label_desc])
    for elem in range(len(inputs)):
            yield (labels[elem], load_video(inputs[elem]))

dataset = tf.data.Dataset.from_generator(
    video_gen, 
    (tf.float32, tf.float32), 
    (tf.TensorShape([]), tf.TensorShape([None]))
)

model = models.Sequential()

# variable length, set height, set width, 3 channels
model.add(layers.Input(shape=(None, 240, 320, 3)))

【问题讨论】:

    标签: tensorflow keras tensorflow-datasets


    【解决方案1】:

    对于视频输入,请使用处理 5D 输入的tf.keras.layers.TimeDistributed

    考虑一批 32 个视频样本,其中每个样本是 128x128 RGB 图像,具有 channels_last 数据格式,跨越 10 个时间步长。批量输入形状为(32, 10, 128, 128, 3) 工作示例代码

    import tensorflow as tf
    inputs = tf.keras.Input(shape=(10, 128, 128, 3))
    conv_2d_layer = tf.keras.layers.Conv2D(64, (3, 3))
    outputs = tf.keras.layers.TimeDistributed(conv_2d_layer)(inputs)
    

    输出.形状

    TensorShape([None, 10, 126, 126, 64])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-24
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-05
      相关资源
      最近更新 更多