首页 > 解决方案 > 数据基数不明确:x 大小:25838 y 大小:3589 确保所有数组包含相同数量的样本

问题描述

我正在尝试在 FER2013 测试集中使用超参数优化,但我无法克服这个问题......任何帮助或建议。

import matplotlib.pyplot as plt

import pandas as pd
import seaborn as sns
import os
import cv2 as cv
import glob as gb

# Importing Deep Learning Libraries
import tensorflow as tf
from tensorflow import keras
import numpy as np

from keras.preprocessing.image import load_img, img_to_array
from keras.preprocessing.image import ImageDataGenerator
from keras.layers import Dense,Input,Dropout,GlobalAveragePooling2D,Flatten,Conv2D,BatchNormalization,Activation,MaxPooling2D
from keras.models import Model,Sequential
from keras.optimizers import Adam,SGD,RMSprop

db=pd.read_csv("/content/drive/MyDrive/Colab Notebooks/fer2013.csv")

pip install np_utils

X_train = []
y_train = []
X_test = []
y_test = []
for index, row in db.iterrows():
    k = row['pixels'].split(" ")
    if row['Usage'] == 'Training':
        X_train.append(np.array(k))
        y_train.append(row['emotion'])
    elif row['Usage'] == 'PublicTest':
        X_test.append(np.array(k))
        y_test.append(row['emotion'])

X_train = np.array(X_train,'float32')
y_train = np.array(y_train,'float32')
X_test = np.array(X_test,'float32')
y_test = np.array(y_test,'float32')


X_train = np.reshape(X_train,(X_train.shape[0], 48, 48, 1))
X_test = np.reshape(X_test,(X_test.shape[0], 48, 48, 1))

y_train= keras.utils.to_categorical(y_train, num_classes=7)
y_test = keras.utils.to_categorical(y_test, num_classes=7)

X_train-=np.mean(X_train,axis=0)
X_train /= np.std(X_train,axis=0)
X_test-=np.mean(X_test,axis=0)
X_test /= np.std(X_test,axis=0)

X_train.shape

X_test.shape

!pip install keras-tuner

def model(hp):

  model=keras.Sequential([
    keras.layers.Conv2D(
        filters=hp.Int(
            'conv1',
            min_value=32,
            max_value=128,
            step=16
        ),
        kernel_size=hp.Choice(
            'kernel1',
            values=[3,5]
        ),
        activation='relu',
        input_shape=(48,48,1)

    ),
     keras.layers.Conv2D(
        filters=hp.Int(
            'conv2',
            min_value=32,
            max_value=128,
            step=16
        ),
        kernel_size=hp.Choice(
            'kernel2',
            values=[3,5]
        ),
        activation='relu',
       

    ),
     keras.layers.Conv2D(
        filters=hp.Int(
            'conv3',
            min_value=32,
            max_value=128,
            step=16
        ),
        kernel_size=hp.Choice(
            'kernel3',
            values=[3,5]
        ),
        activation='relu',
       

    ),
    
    keras.layers.Flatten(),
    keras.layers.Dense(
        units=hp.Int('dense_1_units', min_value=32, max_value=128, step=16),
        activation='relu'
    ),
    
    
    keras.layers.Dense(
         7,
        activation='softmax'
    )

  ])
  model.compile(
              optimizer=keras.optimizers.Adam(hp.Choice('learning_rate', values=[1e-2, 1e-3])),
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy']
              )
  return model

from kerastuner import RandomSearch
from kerastuner.engine.hyperparameters import HyperParameters

tuner_search=RandomSearch(model,
                          objective='val_accuracy',
                          max_trials=5,directory='output',project_name="emotion")

tuner_search.search(X_train,X_test,epochs=3,validation_split=0.1)

ValueError:数据基数不明确:x 大小:25838 y 大小:3589 确保所有数组包含相同数量的样本。

标签: pythonnumpytensorflowkerasconv-neural-network

解决方案


我只是因为一个愚蠢的错误连续撞了 10 个小时的头

错误:tuner_search.search(X_train,X_test,epochs=3,validation_split=0.1) 正确:tuner_search.search(X_train,y_train,epochs=3,validation_split=0.1)


推荐阅读