层密集的输入0与层不兼容:期望输入形状的轴-1值为784,但接收到形状的输入(None, 14) &



请帮帮我。谢谢你

请查看图片以获取更多关于编码的信息https://i.stack.imgur.com/fw5qW.jpg

请耐心听我说……也请帮助,如果你知道解决方案。谢谢你import numpy as np以pd方式导入熊猫导入tensorflow为tf

from google.colab import files
uploaded = files.upload()
import io
df=pd.read_csv(io.BytesIO(uploaded['heart.csv']))
df
df.isna().sum(axis="rows")
from tensorflow.keras.utils import to_categorical
df.shape
y=df["cp"]
x=df.drop("cp",axis="columns")
y=to_categorical(y)
y.shape
x=pd.get_dummies(x,columns=["sex"])
x
df.hist(figsize=(10,10))
plt.show()
mnist = tf.keras.datasets.mnist
(x_train,y_train), (x_test,y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
from keras.layers import Dense , Flatten
from keras.models import Sequential
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28,28)),
tf.keras.layers.Dense(128,activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10)])`
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
model.compile(loss=loss_fn,optimizer="adam",metrics=["accuracy"])
model.fit(x_train,y_train,epochs=1000)
x
data=pd.DataFrame({"age":[50],"trestbps":[120],"chol":[350],"fbs":[1],"restecg":[1],"thalach":[150],"exang":[0],"oldpeak":[1.5],"slope":[1],"ca":[0],"thal":[2],"target":[1],"sex_0":[0],"sex_1":[1]})
data
model.predict(data)

我的老师在木星上使用这个命令,但它不起作用…它显示错误…在colab和jupyter中都试过了…

from keras.utils import to_categorical
y=to_categorical(y)
y.shape
X=X.drop(["PassengerId","Name","Ticket"],axis="columns")
X
X=pd.get_dummies(X,columns=["Sex"])
from keras.layers import Dense
from keras.models import Sequential
model=Sequential()
model.add(Dense(32,activation="relu",input_shape=(7,)))
model.add(Dense(2,activation="softmax"))
model.compile(loss="categorical_crossentropy",optimizer="adam",metrics=["accuracy"])
model.fit(X,y,epochs=10)
X
data=pd.DataFrame({"Pclass":[3],"Age":[84],"SibSp":[0],"Parch":[1],"Fare":[7],"Sex_female":[0],"Sex_male":[1]})
data
model.predict(data)
#Output array([[0.9702792 , 0.02972085]], dtype=float32)

看看你老师的python代码,错误是告诉你稠密层期望输入数据具有784个特征,但得到的一系列数据只有14个特征。

通过查看python代码,我假设您正在使用预定义的数据集MNIST在老师的代码中,如果我没记错的话,x_train的输入数据的形状是(784,x),其中x是一个整数,可以是3、4等。

现在要解决这个问题,您必须了解如何将数据传递到模型中。再看看你老师的代码,我们有这个:

from keras.layers import Dense
from keras.models import Sequential
model=Sequential()
model.add(Dense(32,activation="relu",input_shape=(7,)))
model.add(Dense(2,activation="softmax"))

所以我们有一个有两层的顺序模型:

  • 第一个密集节点,也可以作为输入层对于模型,由32个单元组成,整流线性单元作为激活函数,最重要的是,我们知道输入形状这个模型被写成(7,)的元组。那么这个值(7,)是多少?基本上你告诉模型你的输入数据有7个特征所以每个数据必须包含7个值。
  • 第二个Dense节点是简单的输出层,它在输出中给出两个值之间的概率答案。这是不太重要的,因为你的问题是传递输入数据。

现在要理解数据是如何在Keras/Tensorflow中处理的,你必须把数据想象成一个矩阵,其中在行中你有数据的值,而列表示值的含义。有点像Excel/CSV文件,那里有一个头,解释每列值的含义。

如果你用过NumPy,更具体地说是维度数组,基本上是形状数据的形状是在将数据提供给模型之前应该检查的最重要的事情,因为形状告诉您如何处理数据以及数据以多少维表示。例如,如果数据的形状为(784,14),则数据表示为二维(2D)矩阵,其中第一个值(784)是矩阵的行,而第二个值(14)是列。

所以回答你的问题,python程序期望输入一系列784个特征的数据,对我来说是翻译成784列,但你输入的是一系列只有14个特征的数据。为了解决这个问题,你必须检查你的数据的形状,你可以简单地用x_train.shape来做,看看你得到的输出。接下来,您必须正确地将数据传递给模型,然后您的程序才能确保工作。一种方法是重塑数据。

为了更好地理解Tensorflow如何处理数据的形状,请参阅本指南。

我建议你的另一件事是用更合适的方式写你的问题。我的建议是这样写一个问题:
  • 问题标题。
  • 问题描述。
  • 显示得到的错误。
  • 写下你尝试过的东西,并添加你的其他类似问题的参考。
  • 总是显示至少一段代码,以便人们可以分析它。多段代码也可以。
  • 可选,写下你想要的预期结果。

如果你这样写问题,人们肯定会更好地理解你的问题。

我希望这有助于更好地理解你的问题。

相关内容

  • 没有找到相关文章

最新更新