Python ValueError:检查模型目标时出错:预期激活_2具有形状(None,761,1),但获得具有形状(1779,1)的数组

Python ValueError:检查模型目标时出错:预期激活_2具有形状(None,761,1),但获得具有形状(1779,1)的数组,python,keras,Python,Keras,我有以下错误声明 ValueError: Error when checking model target: expected activation_2 to have shape (None, 761, 1) but got array with shape (1, 779, 1) 在错误中,我不知道数字761是什么意思,我的data1的形状是779*80,我的data3的形状是779*1。谢谢你的帮助 from __future__ import print_function from k

我有以下错误声明

ValueError: Error when checking model target: expected activation_2 to have shape (None, 761, 1) but got array with shape (1, 779, 1)
在错误中,我不知道数字761是什么意思,我的
data1
的形状是
779*80
,我的
data3
的形状是
779*1
。谢谢你的帮助

from __future__ import print_function
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential

from keras.layers import Dense, \
                         Dropout, \
                         Activation, \
                         Flatten

from keras.layers import Convolution1D, \
                         MaxPooling2D, \
                         Convolution2D

from keras.utils import np_utils

import scipy.io as sio
import numpy as np

matfn = 'LIVE_data.mat'

data = sio.loadmat(matfn) 
data0 = data['data']
data1 = np.ones((1, 779, 80))
data1[0, :, :] = data0
data00 = data['label']
data2 = np.ones((1,779,1))
data2[0, :, :] = data00
data000 = data['ref_ind_live']
data3 = np.ones((1, 779, 1))
data3[0, :, :] = data000
batch_size = 64
nb_classes = 30
nb_epoch = 50

X_train = data1
y_train = data3
X_test = data1[0, :]
y_test = data3[0, :]

X_train = X_train.astype('double')
X_test = X_test.astype('double')
X_train /= 255
X_test /= 255

# Convert class vectors to binary class matrices.
Y_train = np_utils.to_categorical(y_train, nb_classes)
Y_test = np_utils.to_categorical(y_test, nb_classes)

model = Sequential()

model.add(Convolution1D(32, \
                        10, \
                        border_mode = 'same', \
                        input_shape = (779, \
                                       80)))
model.add(Activation('relu'))
model.add(Convolution1D(64, \
                        10, \
                        activation='relu'))
model.add(Dropout(0.25))
model.add(Convolution1D(128, \
                        10, \
                        activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('softmax'))

# Let's train the model using RMSprop
model.compile(loss = 'categorical_crossentropy', \
              optimizer = 'rmsprop', \
              metrics=['accuracy'])

print("start train")

model.fit(X_train, \
          Y_train, \
          batch_size = batch_size, \
          nb_epoch = nb_epoch, \
          shuffle = True)

print("end")

score = model.evaluate(X_test, \
                       Y_test, \
                       batch_size = 32)

print('Test score:', \
      score[0])
print('Test accuracy:', \
      score[1])

您的模型输出形状是
(779,1)
,并且预期在最后一层中会有相同的形状,但由于2个卷积运算减少到761。因此,通过在另外两个卷积层中添加
border\u mode='same'
,可以解决这个问题

您可以检入模型摘要:


层(类型)输出形状参数

conv1d_1(conv1d)(无、779、32)25632


激活1(激活)(无,779,32)0


conv1d_2(conv1d)(无、770、64)20544


辍学1(辍学)(无、770、64)0


conv1d_3(conv1d)(无,761128)82048


辍学2(辍学)(无,761128)0


密集型_13(密集型)(无,761,1)129



激活_2(激活)(无,761,1)0

您的模型输出形状是
(779,1)
,并且在最后一层中预期相同的形状,但由于2个卷积操作减少到761。因此,通过在另外两个卷积层中添加
border\u mode='same'
,可以解决这个问题

您可以检入模型摘要:


层(类型)输出形状参数

conv1d_1(conv1d)(无、779、32)25632


激活1(激活)(无,779,32)0


conv1d_2(conv1d)(无、770、64)20544


辍学1(辍学)(无、770、64)0


conv1d_3(conv1d)(无,761128)82048


辍学2(辍学)(无,761128)0


密集型_13(密集型)(无,761,1)129



激活2(激活)(无,761,1)0

我已修改了您的布局,以便更容易调试。您的旧布局还可以,但应用不一致。此外,您的值、运算符等经常相互混淆。这并不是最优的,因为未分离的元素可能会模糊在一起,让阅读您的代码的人看不清,特别是当他们不熟悉您的布局样式或所使用的某些技术时,有时甚至当他们不熟悉时。要做到这一点,您应该像我用
data1=np.ones((1779,80))
和下面的25行一样将它们分开,或者像我用其余的代码那样分开。有关如何在Python中执行间距的更多信息,请阅读和。我已经修改了您的布局,以便更容易调试。您的旧布局还可以,但应用不一致。此外,您的值、运算符等经常相互混淆。这并不是最优的,因为未分离的元素可能会模糊在一起,让阅读您的代码的人看不清,特别是当他们不熟悉您的布局样式或所使用的某些技术时,有时甚至当他们不熟悉时。要做到这一点,您应该像我用
data1=np.ones((1779,80))
和下面的25行一样将它们分开,或者像我用其余代码那样分开。有关如何在Python中执行间距的更多信息,请阅读和。