【问题标题】:In[0] is not a matrix. Instead it has shape [100] [Op:MatMul]In[0] 不是矩阵。相反,它的形状为 [100] [Op:MatMul]
【发布时间】:2020-09-11 14:06:51
【问题描述】:

我是 tensorflow 的新手,我正在尝试为 NLP 实现一个简单的神经网络,但我遇到了一个错误,我不知道如何解决。我的网络的代码在这里:

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 个浮点数的张量(在 0 和 1 之间标准化的 ascii 字符),如下代码所示:

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 input
Tensor("dense_input:0", shape=(None, 100), dtype=float32), but it was
called 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() 需要一个矩阵作为输入,但我无法终生弄清楚如何将我的列表转换为正确的格式,我在互联网上找不到任何可以解决我的问题的东西

任何人都可以提供任何帮助吗? 谢谢!

【问题讨论】:

  • 这里的human 是什么?
  • 您的 human[0] 缺少批次维度,但根据您的打印结果,它确实存在,所以这确实很奇怪。您可以尝试将tf.expand_dims(human[0], 0) 作为您的生成器的输入吗?

标签: python tensorflow neural-network nlp artificial-intelligence


【解决方案1】:

我能够通过在 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 的定义的不同之处。希望这对同样有问题的人有所帮助,如果您需要更多信息,请评论此答案!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多