ValueError:logits和标签必须具有相同的形状((1,7,7,2)与(1,2))



我是CNN的新手。我正在尝试创建以下模型。但是我得到以下错误:;ValueError:logits和标签必须具有相同的形状((1,7,7,2(vs(1,2((";

下面的代码我正在尝试实现

#create the training data set
train_data=scaled_data[0:training_data_len,:]
#define the number of periods
n_periods=28
#split the data into x_train and y_train data set
x_train=[]
y_train=[]
for i in range(n_periods,len(train_data)):
x_train.append(train_data[i-n_periods:i,:28])
y_train.append(train_data[i,29])
x_train=np.array(x_train)
y_train=np.array(y_train)
#Reshape the train data
x_train=x_train.reshape(x_train.shape[0],x_train.shape[1],x_train.shape[2],1)
x_train.shape
y_train = keras.utils.to_categorical(y_train,2)
# x_train as the folllowing shape (3561, 28, 28, 1)
# y_train as the following shape (3561, 2, 2)
#Build the 2 D CNN model for regression
model= Sequential()
model.add(Conv2D(32,kernel_size=(3,3),padding='same',activation='relu',input_shape=(x_train.shape[1],x_train.shape[2],1)))
model.add(Conv2D(64,kernel_size=(3,3),padding='same',activation='relu'))
model.add(MaxPooling2D(pool_size=(4,4)))
model.add(Dropout(0.25))
model.add(Dense(128,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='sigmoid'))
model.add(Dense(2, activation='sigmoid'))
model.summary()
#compile the model
model.compile(optimizer='ADADELTA', loss='binary_crossentropy', metrics=['accuracy'])
#train the model
model.fit(x_train, y_train, batch_size=1, epochs=1, verbose=2)

您的方法中存在两个问题:

  1. 您使用的是卷积/MaxPooling层,其中输入/输出为矩阵,即形状为(Batch_Size,Height,Width,Depth(。然后添加一些密集层,这些层通常期望向量而不是矩阵作为输入。因此,在将MaxPooling的输出提供给密集层之前,您必须先使其变平,即在model.add(Dropout(0.25))之后和model.add(Dense(128,activation='relu'))之前添加model.add(Flatten())
  2. 您正在进行二进制分类,即,您有两个类。您正在使用binary_crossentropy作为损失函数,为了实现这一点,您应该保持目标不变(01(,而不是使用y_train = keras.utils.to_categorical(y_train,2)。最后一层应该有1神经元,而不是2(将model.add(Dense(2, activation='sigmoid'))更改为model.add(Dense(1, activation='sigmoid'))(

相关内容

最新更新