簡體   English   中英

ValueError:輸入形狀的預期軸 -1 的值為 51948,但接收到的輸入形狀為(無,52)

[英]ValueError: expected axis -1 of input shape to have value 51948 but received input with shape (None, 52)

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.model_selection import train_test_split
import tensorflow.keras as keras

dataset = pd.read_csv('C:\\Users\\Maxie\\MyStuff\\FinalDatasetEng.csv')
inputs = dataset.iloc[:, 2:54].values
targets = dataset.iloc[:, 55].values

from sklearn.model_selection import train_test_split
inputs_train, inputs_test, targets_train, targets_test = train_test_split(inputs, targets, 
test_size = 0.20, random_state = 0)

import keras
from keras.models import Sequential
from keras.layers import Dense

model = keras.Sequential([

        # input layer
        keras.layers.Flatten(input_shape=(inputs.shape[0], inputs.shape[1])),

        # 1st dense layer
        keras.layers.Dense(520, activation='relu'),

        # 2nd dense layer
        keras.layers.Dense(208, activation='relu'),

        # 3rd dense layer
        keras.layers.Dense(52, activation='relu'),

        # output layer
        keras.layers.Dense(4, activation='softmax')
    ])

optimiser = keras.optimizers.Adam(learning_rate=0.0001)
model.compile(optimizer=optimiser,
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

history = model.fit(inputs_train, targets_train, validation_data=(inputs_test, targets_test), 
batch_size=32, epochs=50)

這是我的代碼,我收到此錯誤:ValueError:dense_20 層的輸入 0 與該層不兼容:輸入形狀的預期軸 -1 具有值 51948,但接收到形狀的輸入(無,52)。 任何人都請幫我解決這個問題。

您有一個一維數組作為您的特征輸入,但是您將樣本數量和特征數量展平,從而提供 model 51948 個輸入特征(999 個樣本input.shape[0] * 52 個特征input.shape[1] = 51948)。 因此,您的 model 需要一個包含 51948 個輸入的數組,但您已經傳遞了具有 52 列的inputs_train

推理:

如果您將一維數組作為輸入要素,則不應展平您的輸入。 您的輸入特征是 52 列和 999 個樣本的數組。 代替Flatten層,使用InputLayer

所以,修改后的代碼應該是這樣的:

model = keras.Sequential([

        # input layer
        #change this line to input layer and set the input shape to the shape of your input features
        #keras.layers.Flatten(input_shape=(inputs.shape[0], inputs.shape[1])),
        keras.layers.InputLayer(input_shape=(inputs.shape[1],)), 

        # 1st dense layer
        keras.layers.Dense(520, activation='relu'),

        # 2nd dense layer
        keras.layers.Dense(208, activation='relu'),

        # 3rd dense layer
        keras.layers.Dense(52, activation='relu'),

        # output layer
        keras.layers.Dense(4, activation='softmax')
    ])

optimiser = keras.optimizers.Adam(learning_rate=0.0001)
model.compile(optimizer=optimiser,
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

history = model.fit(inputs_train, targets_train, validation_data=(inputs_test, targets_test), 
batch_size=32, epochs=50)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM