python - ValueError:输入形状的预期轴 -1 的值为 51948,但接收到的输入形状为(无,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)。任何人都请帮我解决这个问题。
解决方案
您有一个一维数组作为您的特征输入,但是您将样本数量和特征数量展平,从而为模型提供 51948 个输入特征(999 个样本input.shape[0]
* 52 个特征input.shape[1]
= 51948)。因此,您的模型需要一个 51948 输入的数组,但您已经通过inputs_train
了 52 列。
推理:
如果您将一维数组作为输入要素,则不应展平您的输入。您的输入特征是 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)
推荐阅读
- ruby-on-rails-6 - ActiveStorage::FileNotFoundError(使用数据库后端)
- c# - 有什么方法可以避免在 iText 7 中加载 XMP 元数据?
- regex - RegEx 不匹配的信息
- python - TFBertForSequenceClassification Keras model.layers 信息详情为空?如何检查模型?
- python - python输出没有很多间距
- php - PHP中具有多重继承的类的存储库+工厂模式实现?
- kubernetes - 如何从 Minikube 连接到在 localhost 上运行的 MongoDB
- java - Spring Boot 2.2.5 获取post请求参数
- hash - 两个不同字符串具有相同哈希的概率?
- c++ - c ++字符串没有被重置