In[0] 不是一个矩阵。相反,它的形状是 [100] [Op:MatMul]

我是 TensorFlow 的新手,正在尝试实现一个用于自然语言处理的简单神经网络,但我遇到了一个无法解决的错误。我的网络代码如下:

model = tf.keras.Sequential()model.add(layers.Dense(7*7*256, use_bias=False, input_shape=(100,)))model.add(layers.BatchNormalization())model.add(layers.ReLU())model.add(layers.Dense(7*7*256, use_bias=False))model.add(layers.BatchNormalization())model.add(layers.ReLU())model.add(layers.Dense(7*7*128, use_bias=False))model.add(layers.BatchNormalization())model.add(layers.ReLU())model.add(layers.Dense(7*7*64, use_bias=False))model.add(layers.BatchNormalization())model.add(layers.ReLU())model.add(layers.Dense(7*7*64, use_bias=False))model.add(layers.BatchNormalization())model.add(layers.ReLU())model.add(layers.Dense(100, use_bias = False, activation="relu"))

输入形状是 (100,)。我试图输入一个包含 100 个浮点数的张量(ASCII 字符在 0 到 1 之间标准化),如下面的代码所示:

generator = make_generator_model()human_array = tf.convert_to_tensor([human[0]])print("human shape: " + str(tf.shape(human[0])))noise = tf.random.normal([1, 100])print("noise shape: " + str(tf.shape(noise)))generated_response_test = generator(human[0], training=False)print("m: " + chr(109))print(generated_response_test)print(get_message(np.round(generated_response_test[0] * 95 + 32)))

其中 human[0] 就是我提到的张量

我得到了以下错误,以及这个警告:

WARNING:tensorflow:Model was constructed with shape (None, 100) for inputTensor("dense_input:0", shape=(None, 100), dtype=float32), but it wascalled on an input with incompatible shape (100,).In[0] is not a matrix. Instead it has shape [100] [Op:MatMul]

有趣的是,当我输入形状相同的正态分布的随机噪声时,代码没有警告或错误。tf.shape(noise) 和 tf.shape(human[0]) 的输出分别是:

human shape: tf.Tensor([  1 100], shape=(2,), dtype=int32)noise shape: tf.Tensor([  1 100], shape=(2,), dtype=int32)

所以我很困惑

我相当确定这是我定义张量变量的方式有问题,matmul() 需要一个矩阵作为输入,但我无论如何都无法弄清楚如何将我的列表转换成正确的格式,而且我在网上找不到任何解决我问题的资料

有谁能提供帮助吗?谢谢!


回答:

我通过在 tf.variable 中指定 shape = [1,100] 而不是 shape = (100,) 解决了这个问题,并且我将 [] 移到了输入内部,所以我的工作代码是

generator = make_generator_model()human_input = tf.Variable([np.array(human[0])], dtype = tf.float32, shape = [1,100])human_input = tf.random.normal([1, 100])generated_response = generator(human_input, training=False)print("m: " + chr(109))print(generated_response)print(print_message(np.round(generated_response[0] * 95 + 32)))

注意我对 human_input 的定义的不同之处。希望这能帮助那些也有同样问题的人,如果你需要更多信息,请在评论中回复!

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注