【问题标题】:keras concatenate along dimension 0 valueerrorkeras 沿维度 0 valueerror 连接
【发布时间】:2018-05-31 06:27:01
【问题描述】:

所以我试图连接两个 keras 张量:

a = keras.layers.Input(shape=[5,], dtype='float', name='a')
b = keras.layers.Input(shape=[5,], dtype='float', name='b')
s = keras.layers.concatenate([a, b], axis=0)
model = keras.models.Model(inputs=[a, b], outputs=s)

aa = np.array([[1,1,1,1,1]])
bb = np.array([[3,3,3,3,3]])

cc = model.predict({'a':aa, 'b':bb})

我得到的是:

Traceback (most recent call last):File"D:\Anaconda3\envs\kerase\lib\sitepackages\IPython\core\interactiveshell.py", line 2910, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-64-ddbf264b3bdb>", line 50, in <module>
cc = model.predict({'a':aa, 'b':bb})
File "D:\Anaconda3\envs\kerase\lib\site-packages\keras\engine\training.py", line 1713, in predict
verbose=verbose, steps=steps)
File "D:\Anaconda3\envs\kerase\lib\site-packages\keras\engine\training.py", line 1278, in _predict_loop
outs[i][batch_start:batch_end] = batch_out

ValueError: 无法将输入数组从形状 (2,5) 广播到形状 (1,5)

我不明白。我没有正确使用“轴”参数吗?使用axis=-1,张量将沿着最后一个维度正确连接。

谢谢。

【问题讨论】:

    标签: python neural-network keras concatenation valueerror


    【解决方案1】:

    好的,2 个 rank-1 张量只能以一种可能的方式连接。这有效:

    a = keras.layers.Input(shape=[1, 5], dtype='float', name='a')
    b = keras.layers.Input(shape=[1, 5], dtype='float', name='b')
    s = keras.layers.concatenate([a, b], axis=-2)
    
    model = keras.models.Model(inputs=[a, b], outputs=s)
    
    aa = np.array([[[1,1,1,1,1]]])
    bb = np.array([[[3,3,3,3,3]]])
    
    cc = model.predict({'a':aa, 'b':bb})
    

    【讨论】:

      【解决方案2】:

      Keras 期望输出 batch_size 与输入 batch_size 相同。 在这种情况下,batch_size 始终是第一个维度,即 1。

      所以常用的策略是使用tf.expand_dims将第一个维度1加为batch_size。这是修改后的代码。

      a = keras.layers.Input(shape=[1, 5], dtype='float', name='a')
      b = keras.layers.Input(shape=[1, 5], dtype='float', name='b')
      s = keras.layers.concatenate([a, b], axis=-2)
      f = tf.expand_dims(concated, axis=0)
      
      model = keras.models.Model(inputs=[a, b], outputs=f)
      
      aa = np.array([[1,1,1,1,1]])
      bb = np.array([[3,3,3,3,3]])
      
      cc = model.predict({'a':aa, 'b':bb})
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-29
        • 2018-05-12
        • 2021-12-01
        • 2014-02-25
        相关资源
        最近更新 更多