【问题标题】:ValueError: Input arrays should have the same number of samples as target arrays. Found 1 input samples and 416 target samplesValueError:输入数组应具有与目标数组相同数量的样本。找到 1 个输入样本和 416 个目标样本
【发布时间】:2019-05-30 22:07:57
【问题描述】:

我打算用 CNN 对 2 类使用 keras 进行分类。这是代码

import random
import pandas as pd
from pandas import Series,DataFrame

import numpy as np
import matplotlib.pyplot as plt

import keras
from keras.datasets import fashion_mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout,Activation ,Flatten, Dropout, 
Conv2D, MaxPooling2D, Reshape
from keras.optimizers import RMSprop
from keras.optimizers import Adam

df_list = []
for i in range(4):    
    cl_data_set = pd.read_csv("./csv/cl_" + str(i) +".csv",sep=",",header=0)
    cl_x = DataFrame(cl_data_set.drop("POINT",axis=1))
    df_list.append(cl_x)
    op_data_set = pd.read_csv("./csv/op_" + str(i) +".csv",sep=",",header=0)
    op_x = DataFrame(op_data_set.drop("POINT",axis=1))
    df_list.append(op_x)

close_1 = np.array(df_list[0])
open_1 = np.array(df_list[1])
close_2 = np.array(df_list[2])
open_2 = np.array(df_list[3])
close_3 = np.array(df_list[4])
open_3 = np.array(df_list[5])
close_4 = np.array(df_list[6])
open_4 = np.array(df_list[7])
train_dataset = []
test_dataset = []
for i in range(0,13000,100):
    if i >= 10400:
        test_dataset.append([close_1[i:i+100,:],1])
        test_dataset.append([close_2[i:i+100,:],1])
        test_dataset.append([open_1[i:i+100,:],0])
        test_dataset.append([open_2[i:i+100,:],0])

    else:
        train_dataset.append([close_1[i:i+100,:],1])
        train_dataset.append([close_2[i:i+100,:],1])
        train_dataset.append([open_1[i:i+100,:],0])
        train_dataset.append([open_2[i:i+100,:],0])

random.shuffle(train_dataset)
random.shuffle(test_dataset)

x_train_list = []
y_train_list = []
x_test_list = []
y_test_list = []
for i in range(416):
        x_train_list.append(train_dataset[i][0])
        y_train_list.append(train_dataset[i][1])

for i in range(104):
        x_test_list.append(test_dataset[i][0])
        y_test_list.append(test_dataset[i][1])

x_train = np.array(x_train_list)
x_test = np.array(x_test_list)
y_train = np.array(y_train_list)
y_test = np.array(y_test_list)
model = Sequential()

x_train = np.reshape(x_train,(-1,416,100,4))
model.add(Conv2D(32, kernel_size=(3,3), activation='relu', input_shape=(416,100,4)))
model.add(MaxPooling2D(pool_size=(1,2)))

model.add(Dropout(0.4))
model.add(Flatten())
model.add(Dense(128, activation='sigmoid'))
model.add(Dropout(0.4))
model.add(Dense(1, activation='sigmoid'))

model.summary()
print("\n")
model.compile(loss='binary_crossentropy',optimizer="Adam",metrics=['accuracy'])



history = model.fit(x_train, y_train,batch_size=200,epochs=2000,verbose=1,validation_data=(x_test, y_test))


score = model.evaluate(x_test,y_test,verbose=1)
print("\n")
print("Test loss:",score[0])
print("Test accuracy:",score[1])

接下来我将发布一个完整的错误列表 使用 TensorFlow 后端。 x_train.shape (416, 100, 4) x_test.shape (104, 100, 4) y_train.shape (416,) y_test.shape (104,)

Traceback (most recent call last):
  File "CNN.py", line 121, in <module>
history = model.fit(x_train, y_train,batch_size=200,epochs=2000,verbose=1,validation_data=(x_test, y_test))
  File "C:\Anaconda3\envs\tensorflow\lib\site-packages\keras\engine\training.py", line 950, in fit
batch_size=batch_size)
  File "C:\Anaconda3\envs\tensorflow\lib\site-packages\keras\engine\training.py", line 802, in _standardize_user_data
check_array_length_consistency(x, y, sample_weights)
  File "C:\Anaconda3\envs\tensorflow\lib\site-packages\keras\engine\training_utils.py", line 236, in check_array_length_consistency
'and ' + str(list(set_y)[0]) + ' target samples.')
ValueError: Input arrays should have the same number of samples as target arrays. Found 1 input samples and 416 target samples.

样本总数为520个除以train:test=8:2, x 有 4 ch 数据除以 100 个点,y 有标签(0 或 1)。 请配合解决错误和必要的更正

【问题讨论】:

    标签: python arrays numpy keras deep-learning


    【解决方案1】:

    您需要将目标变量重塑为 (416, 1) 和 (104, 1)。

    y_train = np.array(y_train_list).reshape(-1,1)
    # y_train.shape = (416,1)
    y_test = np.array(y_test_list).reshape(-1,1)
    # y_test.shape = (104,1)
    

    验证您的尺寸是否正确的一种简单方法是将np.array 的形状推断为(rows, cols)(如果它是二维的)。

    【讨论】:

    • 我在尝试建网之前插入了代码并尝试了,但错误仍然没有改变。
    • x_train = np.reshape(x_train,(-1,416,100,4)) 此行将x_train 的形状更改为(1, 416, 100, 4)。我不确定这是否是您打算做的。尝试省略那行?
    猜你喜欢
    • 1970-01-01
    • 2020-08-31
    • 2023-03-10
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 2017-10-26
    • 2019-05-22
    相关资源
    最近更新 更多