【问题标题】:ValueError: expected axis -1 of input shape to have value 51948 but received input with shape (None, 52)ValueError:输入形状的预期轴 -1 的值为 51948,但接收到的输入形状为(无,52)
【发布时间】:2021-08-23 16:37:08
【问题描述】:
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)。任何人都请帮我解决这个问题。

【问题讨论】:

  • 你的输入和目标的形状是什么?
  • 您的输入是一维数组。为什么使用 Flatten 层来平整 input_shape[0]input_shape[1]input_shape[0] 是示例的数量。正确的?似乎您有 999 个示例,因为 51948/52。所以不要扁平化你的例子和特性。

标签: python tensorflow keras neural-network


【解决方案1】:

您有一个一维数组作为您的特征输入,但是您将样本数量和特征数量展平,从而为模型提供 51948 个输入特征(999 个样本 input.shape[0] * 52 个特征 input.shape[1] = 51948)。 所以你的模型需要一个 51948 输入的数组,但你已经传递了 inputs_train,它有 52 列。

推理:

如果您将一维数组作为输入要素,则不应展平您的输入。您的输入特征是一个包含 52 列和 999 个样本的数组。使用InputLayer 代替Flatten 层。

所以,修改后的代码应该是这样的:

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)

【讨论】:

    猜你喜欢
    • 2021-10-08
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 2021-12-17
    • 2021-04-23
    • 2021-09-03
    • 2021-09-15
    相关资源
    最近更新 更多