使用keras在深度学习模型中训练数据形状错误
train data shape error in the deep learning model using keras
我正在为多类分类问题创建深度学习模型,我的模型包含 46 个唯一 类。我的 X_train 形状是 (14382, 183), & y_train是 14382
代码-
#Creating Dummy Variables
X=pd.get_dummies(X, prefix=list((X.select_dtypes(include=[object])).columns))
#Splitting the dataset
from sklearn.model_selection import train_test_split
X_train, X_valid, y_train, y_valid= train_test_split(X, y, test_size=0.3, random_state=10)
model = Sequential()
#adding layers to the model
model.add(Dense(units =367, activation ='relu', input_dim =183))
model.add(Dense(units =182, activation ='relu'))
model.add(Dense(units =182, activation='relu'))
#output layer
model.add(Dense(46, activation='softmax'))
model.compile(loss = 'categorical_crossentropy' , optimizer = keras.optimizers.Adam(learning_rate=0.0001) , metrics = ['accuracy'] )
model.fit(X_train, y_train, epochs=20, batch_size = 50, validation_data=(X_valid, y_valid))
我在运行模型之后遇到错误-
ValueError: Error when checking target: expected dense_110 to have shape (46,) but got array with shape (1,)
如何解决这个错误?
问题出在你的目标形状上
实际上它是一维的,所以你可以保持原样并应用 sparse_categorical_crossentropy
作为损失函数
X = np.random.randint(0,10, (1000,100))
y = np.random.randint(0,3, 1000)
model = Sequential([
Dense(128, input_dim = 100),
Dense(3, activation='softmax'),
])
model.summary()
model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
history = model.fit(X, y, epochs=3)
否则,您可以对其进行一次性编码 pd.get_dummies(y).values
(在训练测试拆分之前)并获得形状为 (n_sample、n_class) 的 y。在这种情况下,您可以使用 categorical_crossentropy
X = np.random.randint(0,10, (1000,100))
y = pd.get_dummies(np.random.randint(0,3, 1000)).values
model = Sequential([
Dense(128, input_dim = 100),
Dense(3, activation='softmax'),
])
model.summary()
model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
history = model.fit(X, y, epochs=3)
我正在为多类分类问题创建深度学习模型,我的模型包含 46 个唯一 类。我的 X_train 形状是 (14382, 183), & y_train是 14382
代码-
#Creating Dummy Variables
X=pd.get_dummies(X, prefix=list((X.select_dtypes(include=[object])).columns))
#Splitting the dataset
from sklearn.model_selection import train_test_split
X_train, X_valid, y_train, y_valid= train_test_split(X, y, test_size=0.3, random_state=10)
model = Sequential()
#adding layers to the model
model.add(Dense(units =367, activation ='relu', input_dim =183))
model.add(Dense(units =182, activation ='relu'))
model.add(Dense(units =182, activation='relu'))
#output layer
model.add(Dense(46, activation='softmax'))
model.compile(loss = 'categorical_crossentropy' , optimizer = keras.optimizers.Adam(learning_rate=0.0001) , metrics = ['accuracy'] )
model.fit(X_train, y_train, epochs=20, batch_size = 50, validation_data=(X_valid, y_valid))
我在运行模型之后遇到错误-
ValueError: Error when checking target: expected dense_110 to have shape (46,) but got array with shape (1,)
如何解决这个错误?
问题出在你的目标形状上
实际上它是一维的,所以你可以保持原样并应用 sparse_categorical_crossentropy
作为损失函数
X = np.random.randint(0,10, (1000,100))
y = np.random.randint(0,3, 1000)
model = Sequential([
Dense(128, input_dim = 100),
Dense(3, activation='softmax'),
])
model.summary()
model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
history = model.fit(X, y, epochs=3)
否则,您可以对其进行一次性编码 pd.get_dummies(y).values
(在训练测试拆分之前)并获得形状为 (n_sample、n_class) 的 y。在这种情况下,您可以使用 categorical_crossentropy
X = np.random.randint(0,10, (1000,100))
y = pd.get_dummies(np.random.randint(0,3, 1000)).values
model = Sequential([
Dense(128, input_dim = 100),
Dense(3, activation='softmax'),
])
model.summary()
model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
history = model.fit(X, y, epochs=3)