如何为 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)
你如何处理这个错误?
检查目标时出错:预期 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)