Python [0]中的元素不是矩阵。相反,它有形状[100][Op:MatMul]

Python [0]中的元素不是矩阵。相反,它有形状[100][Op:MatMul],python,tensorflow,neural-network,nlp,artificial-intelligence,Python,Tensorflow,Neural Network,Nlp,Artificial Intelligence,我是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(

我是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])的输出分别为:

所以我很困惑

我很确定这是我定义张量变量的方式的问题,matmul()需要一个矩阵作为输入,但我一辈子都不知道如何将我的列表转换成正确的格式,我在互联网上找不到任何解决我问题的方法

有人能帮忙吗?
谢谢

我可以通过在tf.variable中指定shape=[1100]而不是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
在这里是什么?您的
human[0]
缺少批处理维度,但根据您的打印结果,它在那里,因此这确实很奇怪。您能否尝试将
tf.expand_dims(人类[0],0)
作为输入输入到生成器中?
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)))