如何为 Keras 顺序模型指定 input_shape

How to specify input_shape for Keras Sequential model

你如何处理这个错误?

检查目标时出错:预期 dense_3 的形状为 (1,) 但得到的数组的形状为 (398,)

我尝试更改 input_shape=(14,),这是 train_samples 中的列数,但我仍然遇到错误。

set = pd.read_csv('NHL_DATA.csv')
set.head()

train_labels = [set['Won/Lost']] 
train_samples = [set['team'], set['blocked'],set['faceOffWinPercentage'],set['giveaways'],set['goals'],set['hits'],
            set['pim'], set['powerPlayGoals'], set['powerPlayOpportunities'], set['powerPlayPercentage'],
           set['shots'], set['takeaways'], set['homeaway_away'],set['homeaway_home']]

train_labels = np.array(train_labels)
train_samples = np.array(train_samples)

scaler = MinMaxScaler(feature_range=(0,1))
scaled_train_samples = scaler.fit_transform(train_samples).reshape(-1,1)

model = Sequential()

model.add(Dense(16, input_shape=(14,), activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(2, activation='softmax'))

model.compile(Adam(lr=.0001), loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(scaled_train_samples, train_labels, batch_size=1, epochs=20, shuffle=True, verbose=2)

1) 你用 .reshape(-1,1) 重塑你的训练样本,这意味着所有训练样本都有 1 维。但是,您将网络的输入形状定义为 input_shape=(14,),表明输入维度为 14。我猜这是您的模型的一个问题。

2) 你使用了 sparse_categorical_crossentropy 这意味着地面实况标签是稀疏的(train_labels 应该是稀疏的)但我想它不是。

以下是您的输入方式示例:

import numpy as np
from tensorflow.python.keras.engine.sequential import Sequential
from tensorflow.python.keras.layers import Dense

x = np.zeros([1000, 14])
y = np.zeros([1000, 2])

model = Sequential()

model.add(Dense(16, input_shape=(14,), activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(2, activation='softmax'))

model.compile('adam', 'categorical_crossentropy')
model.fit(x, y, batch_size=1, epochs=1)