首页 > 解决方案 > 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

标签: pythontensorflowmachine-learningkeras

解决方案


预测需要的批次尺寸。试试这个:

insert = np.array([[6.1, 3.0, 4.6, 1.4]]).astype('float') 

推荐阅读