ValueError:层序的输入 0 与层不兼容:预期 min_ndim=3,发现 ndim=2收到完整形状:[无,2]

问题描述

这是我的代码块:

x_train = []
def preprocess_dataset(batch_size,normalize=True):
    #first accessing RSSI columns to train x-axis
    col_list = [0,1]
    trainX_data_frame = pd.read_csv('/home/Documents/generated_RSSi_dataset.csv',usecols=col_list)
    trainX_rows = pd.DataFrame(trainX_data_frame)
    for trainX_row in trainX_rows:
        train_x1 = trainX_row.loc[0]
        #train_x1 = trainX_row[0].loc[trainX_row]
        train_x2 = trainX_row.loc[1]
        training_x = ((train_x1 + train_x2)/2)
        x_train = x_train.append(training_x) 
    return np.array(x_train),np.array(y_train)

for i in range(training_cycles):
    x_train = preprocess_dataset(x_train)
    y_train = preprocess_dataset(np.array(y_train))
    x_train = x_train.reshape(x_train,time_steps,n_features)
    history = model.fit(x_train,y_train,epochs=30,batch_size=10,validation_split=0.2)

enter image description here

我收到由命名错误引起的属性错误。我已经检查了代码的其他部分,它在任何地方都没有遗漏任何声明或定义。只有在这部分代码函数 preprocess_dataset”中有一些错误。我知道这是由于 for 循环,可能是如果不执行循环,则 x_train 将没有任何属性。但我不知道如何解决这个问题。任何帮助将不胜感激。

注意:y_train 是一个类似的块,所以我没有在代码部分添加它。

%%%%%% 2021 年 7 月 4 日更新%%%% 使用 Nicolas Gervais 的评论,更改了以下内容

x_train = []
y_train = []

def preprocess_dataset_x(batch_size,normalize=True):
    #first accessing RSSI columns to train x-axis
    col_list_x = [0,1]
    trainX_data_frame = pd.read_csv('/home/kobuki/Documents/generated_RSSi_dataset.csv',usecols=col_list_x)
    trainX_rows = pd.DataFrame(trainX_data_frame)
    for index,row in trainX_rows.iterrows():
        train_x1 = trainX_rows.loc[0]
        train_x2 = trainX_rows.loc[1]
        training_x = ((train_x1 + train_x2)/2)
        x_train.append(training_x)
    print("x_train calculated and stored in array")
    return np.array(x_train)    

def preprocess_dataset_y(batch_size,normalize=True):
    #accessing loc coordinates to train y-axis
    col_list_y = [2,3]
    trainY_data_frame = pd.read_csv('/home/kobuki/Documents/generated_RSSi_dataset.csv',usecols = col_list_y)
    trainY_rows = pd.DataFrame(trainY_data_frame)
    for index,row in trainY_rows.iterrows():
        train_y1 = trainY_rows.loc[2]
        train_y2 = trainY_rows.loc[3]
        training_y = (train_y1,train_y2)
        y_train.append(training_y)
    print("y_train calculated and stored in array")
    return np.array(y_train)

for i in range(training_cycles):
    x_train = preprocess_dataset_x(np.array(x_train))
    y_train = preprocess_dataset_y(np.array(y_train))
    ### x_train = tf.data.Dataset.from_tensor_slices(x_train)
    ### y_train = tf.data.Dataset.from_tensor_slices(y_train)
    ### x_train = x_train.reshape(x_train,n_features)
    ### y_train = y_train.reshape(y_train,batch_size=10)

此后,在将模型拟合到 conv1D 时,我现在收到以下错误

enter image description here

我在重塑时也遇到错误,并且沿 x_train,y_train 创建的数组是 460,460,2。我不知道为什么它说 min_ndim 预期为 3。请指教。

%%% 模型 %%%

def createCnnLstmModel(time_steps,n_features):
    ##CorNet architecture
    model = Sequential()
    model.add(Conv1D(filters=32,kernel_size=5,activation='relu',input_shape=(time_steps,n_features)))
    model.add(Batchnormalization())
    model.add(MaxPooling1D(pool_size=4))
    model.add(Dropout(0.1))
    model.add(Conv1D(filters=32,n_features)))
    model.add(Batchnormalization())
    model.add(MaxPooling1D(pool_size=4))
    model.add(Dropout(0.1))
    model.add(LSTM(128,activation='tanh',return_sequences=True))
    model.add(LSTM(128,activation='tanh'))
    model.add(Dense(1))
    model.compile(optimizer='RMSProp',loss='MAE',metrics=['mae','mape',soft_acc])
    model.summary()
    return model

timesteps = 460 且 n_features 为 2。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)