解决了以下错误:
1.ValueError: Input 0 is incompatible with conv1d_1: expected ndim=3, found ndim=4
2.ValueError: Error when checking target: expected dense_3 to have 3 dimensions, but got array with …
1.ValueError: Input 0 is incompatible with conv1d_1: expected ndim=3, found ndim=4
错误代码:
model.add(Conv1D(8, kernel_size=3, strides=1, padding=\'same\', input_shape=(x_train.shape))
或者
model.add(Conv1D(8, kernel_size=3, strides=1, padding=\'same\', input_shape=(x_train.shape[1:])))
这是因为模型输入的维数有误,在使用基于tensorflow的keras中,cov1d的input_shape是二维的,应该:
1、reshape x_train的形状
x_train=x_train.reshape((x_train.shape[0],x_train.shape[1],1))
x_test = x_test.reshape((x_test.shape[0], x_test.shape[1],1))
2、改变input_shape
model = Sequential()
model.add(Conv1D(8, kernel_size=3, strides=1, padding=\'same\', input_shape=(x_train.shape[1],1)))
大神原文:
The input shape is wrong, it should be input_shape = (1, 3253) for Theano or (3253, 1) for TensorFlow. The input shape doesn’t include the number of samples.
Then you need to reshape your data to include the channels axis:
x_train = x_train.reshape((500000, 1, 3253))
Or move the channels dimension to the end if you use TensorFlow. After these changes it should work.
2.ValueError: Error when checking target: expected dense_3 to have 3 dimensions, but got array with …
出现此问题是因为ylabel的维数与x_train x_test不符,既然将x_train x_test都reshape了,那么也需要对y进行reshape。
解决办法:
同时对照x_train改变ylabel的形状
t_train=t_train.reshape((t_train.shape[0],1))
t_test = t_test.reshape((t_test.shape[0],1))
附:
修改完的代码:
import warnings
warnings.filterwarnings(\"ignore\")
import os
os.environ[\"CUDA_VISIBLE_DEVICES\"] = \"0\"
import pandas as pd
import numpy as np
import matplotlib
# matplotlib.use(\'Agg\')
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn import preprocessing
from keras.models import Sequential
from keras. s import Dense, Dropout, BatchNormalization, Activation, Flatten, Conv1D
from keras.callbacks import LearningRateScheduler, EarlyStopping, ModelCheckpoint, ReduceLROnPlateau
from keras import optimizers
from keras.regularizers import l2
from keras.models import load_model
df_train = pd.read_csv(\'./input/train_V2.csv\')
df_test = pd.read_csv(\'./input/test_V2.csv\')
df_train.drop(df_train.index[[2744604]],inplace=True)#去掉nan值
df_train[\"distance\"] = df_train[\"rideDistance\"]+df_train[\"walkDistance\"]+df_train[\"swimDistance\"]
# df_train[\"healthpack\"] = df_train[\"boosts\"] + df_train[\"heals\"]
df_train[\"skill\"] = df_train[\"headshotKills\"]+df_train[\"roadKills\"]
df_test[\"distance\"] = df_test[\"rideDistance\"]+df_test[\"walkDistance\"]+df_test[\"swimDistance\"]
# df_test[\"healthpack\"] = df_test[\"boosts\"] + df_test[\"heals\"]
df_test[\"skill\"] = df_test[\"headshotKills\"]+df_test[\"roadKills\"]
df_train_size = df_train.groupby([\'matchId\',\'groupId\']).size().reset_index(name=\'group_size\')
df_test_size = df_test.groupby([\'matchId\',\'groupId\']).size().reset_index(name=\'group_size\')
df_train_mean = df_train.groupby([\'matchId\',\'groupId\']).mean().reset_index()
df_test_mean = df_test.groupby([\'matchId\',\'groupId\']).mean().reset_index()
df_train = pd.merge(df_train, df_train_mean, suffixes=[\"\", \"_mean\"], how=\'left\', on=[\'matchId\', \'groupId\'])
df_test = pd.merge(df_test, df_test_mean, suffixes=[\"\", \"_mean\"], how=\'left\', on=[\'matchId\', \'groupId\'])
del df_train_mean
del df_test_mean
df_train = pd.merge(df_train, df_train_size, how=\'left\', on=[\'matchId\', \'groupId\'])
df_test = pd.merge(df_test, df_test_size, how=\'left\', on=[\'matchId\', \'groupId\'])
del df_train_size
del df_test_size
target = \'winPlacePerc\'
train_columns = list(df_test.columns)
\"\"\" remove some columns \"\"\"
train_columns.remove(\"Id\")
train_columns.remove(\"matchId\")
train_columns.remove(\"groupId\")
train_columns_new = []
for name in train_columns:
if \'_\' in name:
train_columns_new.append(name)
train_columns = train_columns_new
# print(train_columns)
X = df_train[train_columns]
Y = df_test[train_columns]
T = df_train[target]
del df_train
x_train, x_test, t_train, t_test = train_test_split(X, T, test_size = 0.2, random_state = 1234)
# scaler = preprocessing.MinMaxScaler(feature_range=(-1, 1)).fit(x_train)
scaler = preprocessing.QuantileTransformer().fit(x_train)
x_train = scaler.transform(x_train)
x_test = scaler.transform(x_test)
Y = scaler.transform(Y)
x_train=x_train.reshape((x_train.shape[0],x_train.shape[1],1))
x_test = x_test.reshape((x_test.shape[0], x_test.shape[1],1))
t_train=t_train.reshape((t_train.shape[0],1))
t_test = t_test.reshape((t_test.shape[0],1))
model = Sequential()
model.add(Conv1D(8, kernel_size=3, strides=1, padding=\'same\', input_shape=(x_train.shape[1],1)))
model.add(BatchNormalization())
model.add(Conv1D(8, kernel_size=3, strides=1, padding=\'same\'))
model.add(Conv1D(16, kernel_size=3, strides=1, padding=\'valid\'))
model.add(BatchNormalization())
model.add(Conv1D(16, kernel_size=3, strides=1, padding=\'same\'))
model.add(Conv1D(32, kernel_size=3, strides=1, padding=\'valid\'))
model.add(BatchNormalization())
model.add(Conv1D(32, kernel_size=3, strides=1, padding=\'same\'))
model.add(Conv1D(32, kernel_size=3, strides=1, padding=\'same\'))
model.add(Conv1D(64, kernel_size=3, strides=1, padding=\'same\'))
model.add(Activation(\'tanh\'))
model.add(Flatten())
model.add(Dropout(0.5))
# model.add(Dropout(0.25))
model.add(Dense(512,kernel_initializer=\'he_normal\', activation=\'relu\', W_regularizer=l2(0.01)))
model.add(Dense(128,kernel_initializer=\'he_normal\', activation=\'relu\', W_regularizer=l2(0.01)))
model.add(Dense(1, kernel_initializer=\'normal\', activation=\'sigmoid\'))
optimizers.Adam(lr=0.01, epsilon=1e-8, decay=1e-4)
model.compile(optimizer=optimizer, loss=\'mse\', metrics=[\'mae\'])
model.summary()
ng = EarlyStopping(monitor=\'val_mean_absolute_error\', mode=\'min\', patience=4, verbose=1)
# model_checkpoint = ModelCheckpoint(filepath=\'best_model.h5\', monitor=\'val_mean_absolute_error\', mode = \'min\', save_best_only=True, verbose=1)
# reduce_lr = ReduceLROnPlateau(monitor=\'val_mean_absolute_error\', mode = \'min\',factor=0.5, patience=3, min_lr=0.0001, verbose=1)
history = model.fit(x_train, t_train,
validation_data=(x_test, t_test),
epochs=30,
batch_size=32768,
callbacks=[early_stopping],
verbose=1)predict(Y)
pred = pred.ravel()
继续阅读与本文标签相同的文章
节省时间,我们学会统一管理事务
-
word公式编辑器的使用方法
2026-05-19栏目: 教程
-
库克有多牛?上任8年,让苹果营收涨4倍,市值涨4倍,全球第一
2026-05-19栏目: 教程
-
道通奔驰在线编程全新版本V17.00正式发布
2026-05-19栏目: 教程
-
《吊打面试官》系列-Redis基础
2026-05-19栏目: 教程
-
税控盘操作流程大全!
2026-05-19栏目: 教程
