首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何与扁平层连接

如何与扁平层连接
EN

Stack Overflow用户
提问于 2022-09-28 04:17:09
回答 1查看 94关注 0票数 1

我想在连接之前把输入压平,如下所示。

代码语言:javascript
复制
import numpy as np
import pandas as pd
import tensorflow as tf
from matplotlib import pyplot as plt
from tensorflow import keras
from tensorflow.keras import Model
from tensorflow.keras.callbacks import TensorBoard
from tensorflow.keras.layers import (
    CategoryEncoding,
    Concatenate,
    Dense,
    Discretization,
    Embedding,
    Flatten,
    Input,
)
from tensorflow.keras.layers.experimental.preprocessing import HashedCrossing


dnn_hidden_units = [32, 8]
NBUCKETS = 16

latbuckets = np.linspace(start=38.0, stop=42.0, num=NBUCKETS).tolist()
lonbuckets = np.linspace(start=-76.0, stop=-72.0, num=NBUCKETS).tolist()

# Bucketization with Discretization layer
plon = Discretization(lonbuckets, name="plon_bkt")(inputs["pickup_longitude"])
plat = Discretization(latbuckets, name="plat_bkt")(inputs["pickup_latitude"])
dlon = Discretization(lonbuckets, name="dlon_bkt")(inputs["dropoff_longitude"])
dlat = Discretization(latbuckets, name="dlat_bkt")(inputs["dropoff_latitude"])

# Feature Cross with HashedCrossing layer
p_fc = HashedCrossing(num_bins=NBUCKETS * NBUCKETS, name="p_fc")((plon, plat))
d_fc = HashedCrossing(num_bins=NBUCKETS * NBUCKETS, name="d_fc")((dlon, dlat))
pd_fc = HashedCrossing(num_bins=NBUCKETS**4, name="pd_fc")((p_fc, d_fc))

# Embedding with Embedding layer
pd_embed = Embedding(input_dim=NBUCKETS**4, output_dim=10, name="pd_embed")(
    pd_fc
)

unk = Concatenate(axis=1)([pd_embed])

# Concatenate and define inputs for deep network
deep = Concatenate(name="deep_input",axis=0)(
    [   
        inputs["pickup_longitude"],
        inputs["pickup_latitude"],
        inputs["dropoff_longitude"],
        inputs["dropoff_latitude"],
        Flatten(name="flatten_embedding")(pd_embed),
    ]
)

我在conatenate层得到以下错误。

ValueError:Concatenate层需要具有匹配形状的输入,但连接轴除外。接收:input_shape=(无,),(无,10)

我知道(没有,10)应该是(没有*10)或公正(没有),但我不知道如何到达那里。

EN

回答 1

Stack Overflow用户

发布于 2022-11-18 03:52:34

级联层将输入作为张量列表,除级联轴外,所有形状都相同,并返回单个张量,即所有输入的级联。

在前面提到的错误中,说明您试图连接两个不同的形状--无(尺寸数目未知,所有维度尺寸未知)和无,10(已知维数,以及一个或多个维度的未知大小)。

例如,我必须连接两个张量a和b (a,b必须是相同的大小)。

代码语言:javascript
复制
import tensorflow as tf
a=tf.random.uniform([2,3])
b=tf.random.uniform([2,3])
tf.keras.layers.Concatenate(axis=0)([a.numpy(), b.numpy()])

output:<tf.Tensor: shape=(4, 3), dtype=float32, numpy=
array([[0.5595623 , 0.07109773, 0.646863  ],
   [0.1997714 , 0.6131079 , 0.03418195],
   [0.40428162, 0.94192684, 0.10390592],
   [0.72463846, 0.3348019 , 0.95906615]], dtype=float32)>

如果a和b的形状不同,就会产生错误。

代码语言:javascript
复制
ValueError: A `Concatenate` layer requires inputs with matching shapes except for the concatenation axis. Received: input_shape=[(2, 3), (3, 2)]

谢谢。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73876156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档