python - TensorFlow:“输入形状的预期轴-1......”
问题描述
import tensorflow.keras as keras
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from tensorflow.keras.layers import Dense
from sklearn.preprocessing import OneHotEncoder
if __name__ == "__main__":
file = pd.read_csv("datensatz.csv")
file.loc[file['species'] == 'Iris-setosa', 'species'] = 0
file.loc[file['species'] == 'Iris-versicolor', 'species'] = 1
file.loc[file['species'] == 'Iris-virginica', 'species'] = 2
data = file.to_numpy()
train_x, test_x, train_y, test_y = train_test_split(data[:, :4], data[:, 4], test_size=0.20)
encoder = OneHotEncoder(sparse=False)
train_y = encoder.fit_transform(train_y.reshape(-1, 1))
test_y = encoder.fit_transform(test_y.reshape(-1, 1))
model = keras.models.Sequential([
# sepal length, sepal width, petal length, petal width, species as number
Dense(units=1, name="Input", input_shape=(4,), activation="relu"),
Dense(units=4, activation='relu', name="Hidden"),
Dense(units=3, activation='softmax', name="Output")
])
model.compile(optimizer=keras.optimizers.Adam(), loss='categorical_crossentropy', metrics=['accuracy'])
model.summary()
model.fit(train_x.astype('float'), train_y, verbose=2, batch_size=5, epochs=100)
print('Accuracy:', model.evaluate(test_x.astype('float'), test_y)[1])
insert = np.array([6.1, 3.0, 4.6, 1.4]).astype('float')
print(model.predict(x=insert))
嗨,伙计们,我正在尝试预测一些事情,但我遇到了一个非常奇怪的错误(TensorFlow 真的以它而闻名!),顺便说一句。我使用著名的 Iris 数据集。起初,我可以训练模块,它可以正常工作,正如预期的那样。
纪元 100/100 24/24 - 0s - 损失:0.2863 - 准确率:0.9333 1/1 [============================ =] - 0s 999us/步 - 损失:0.2402 - 准确度:0.9333 这已经足够好了!模型评估也有效。精度:0.9333333373069763
我的 train_x 数据如下所示:
[[5.9 3.0 4.2 1.5]
[5.4 3.0 4.5 1.5]
[5.6 3.0 4.5 1.5]
[5.7 3.8 1.7 0.3]
[5.1 3.3 1.7 0.5]
[6.4 2.9 4.3 1.3]
[7.7 3.8 6.7 2.2]
[6.0 3.4 4.5 1.6]
...]
insert = np.array([6.1, 3.0, 4.6, 1.4]).astype('float') print(model.predict(x=insert))
那行不通!我也尝试了测试集的一个元素,但这给了我相同的结果,一个非常好的和不好的阅读错误。
ValueError:层顺序的输入0与层不兼容:输入形状的预期轴-1具有值4,但接收到形状为[None,1]的输入
坦率地说,我不知道 tensorflow 试图告诉我什么。我该如何解决?我只是想预测一下,可以考虑什么花。如果有人对数据集感兴趣: https ://www.kaggle.com/akashsri99/deep-learning-iris-dataset-keras
解决方案
预测需要的批次尺寸。试试这个:
insert = np.array([[6.1, 3.0, 4.6, 1.4]]).astype('float')
推荐阅读
- python - 如何从 Python 数据框中的时间戳中删除字符
- django - 如何通过管理页面添加现有 django 应用程序的新页面?
- c++ - 为什么我不能访问派生构造函数的成员初始化列表中继承的受保护字段?
- python-3.x - 使用 sqlAlchemy 'scoped_session' 引发异常的并发查询'此事务处于非活动状态'
- powershell - 登录在 Powershell aspx 中使用 Navigation IE 丢失
- vue.js - 如何在浏览器中使用 Vue 组件库?
- python - Python Mongoengine - 获取文档属性的类型
- c# - WebDriverException:'SecurityError:操作不安全。' 通过 Selenium 在 Firefox 中使用 document.write() 时出错
- angular - 我可以在一个设计中结合 ng-zorro-antd 和 ng-zorro-antd-mobile 吗?
- python - 标签有条件地出现