Argument must be a dense tensor

ValueError: Argument must be a dense tensor: [array([3.5, 1.4, 0.2], dtype=float32)…] - got shape [150, 3], but wanted [150]

代码段

最近在学习利用TensorFlow2.0来实现卷积神经网络,今天就遇到一个很头疼的问题。在实现多输入单一输出TensorFlow2.0编译方法时,示例代码运行出现以下错误。
ValueError: Argument must be a dense tensor: [array([3.5, 1.4, 0.2], dtype=float32)…] - got shape [150, 3], but wanted [150]

具体代码如下

import tensorflow as tf
import numpy as np
from sklearn.datasets import load_iris
# data
data = load_iris()
iris_data = np.float32(data.data)
iris_data_1 = []
iris_data_2 = []
for iris in iris_data :
    iris_data_1.append(iris[0])
    iris_data_2.append(iris[1:4])
iris_target = np.float32(tf.keras.utils.to_categorical(data.target,num_classes=3))
# train
train_data = tf.data.Dataset.from_tensor_slices(((iris_data_1,iris_data_2),iris_target)).batch(128)
input_xs_1 = tf.keras.Input(shape=(1),name='input_xs_1')
input_xs_2 = tf.keras.Input(shape=(3),name='input_xs_2')
input_xs = tf.concat([input_xs_1,input_xs_2],axis=-1)
# input_xs = tf.keras.Input(shape=(4),name='input_xs')
out = tf.keras.layers.Dense(32,activation='relu',name='dense_1')(input_xs)
out = tf.keras.layers.Dense(64,activation='relu',name='dense_2')(out)
logits = tf.keras.layers.Dense(3,activation='softmax',name='predictions')(out)
model = tf.keras.Model(inputs = [input_xs_1,input_xs_2],outputs = logits)
opt = tf.keras.optimizers.Adam(1e-3)
model.compile(optimizer=tf.keras.optimizers.Adam(1e-3),
loss = tf.keras.losses.categorical_crossentropy,metrics = ['accuracy'])
model.fit(x = train_data,epochs = 500)
score = model.evaluate(train_data)
# print
print('score',score)

头疼了很长时间,度娘也没给出个很好的答案。有说python2与python3不兼容导致的,但是解决方法比较高深,身为小白的我难以实现。

解决方法

看了很多文章后,终于解决了。具体原理不甚清楚,可能是TensorFlow在数据导入时并不支持list,于是将list改为numpy数组便完美运行。
即将上述代码中在训练#train前加入以下代码

iris_data_1 = np.asarray(iris_data_1)
iris_data_2 = np.asarray(iris_data_2)

本人小白一枚,这是我的第一篇CSDN博客,如有帮助还望多多支持。

参考文献

https://www.jb51.cc/python/185554.html

猜你喜欢

转载自blog.csdn.net/qq_43313751/article/details/107805274