账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    用keras构建CNN做图片多分类问题,关于label向量的维度问题
    35
    0

    网络的结构是这样的:

    #1st layer
    model.add(Conv2D(20, 5, 5, activation='sigmoid', input_shape=(32, 32, 1)))
    model.add(MaxPool2D(pool_size=(2, 2)))
    #2nd layer
    model.add(Conv2D(30, 5, 5, activation='sigmoid'))
    model.add(MaxPool2D(pool_size=(2, 2)))
    #fully connected layer
    model.add(Flatten())
    model.add(Dense(500, init='normal', activation='sigmoid'))
    # model.add(Dropout(0.5))
    # model.add(Dense(10, activation='sigmoid'))
    #model.add(Reshape((-1, 5)))
    model.add(Dense(5, init='normal', activation='softmax'))
    

    调用网络时:

    model.fit(x=traindata, y=trainlabel, batch_size=16, nb_epoch=15, shuffle=True, verbose=1, validation_data=(testdata, testlabel))
    

    报错是这个:
    ValueError: Error when checking input: expected conv2d_1_input to have 4 dimensions, but got array with shape (500, 5)

    然后x向量为4维的图片信息,y向量为图片的标签,他们的shape分别是(500, 32, 32, 1),(500, 5),就是不懂为什么y向也需要是4维的呢

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 煜珩 普通会员 1楼

      在Keras中,标签向量的维度问题通常涉及到多分类问题。在这种情况下,标签向量通常是向量长度,通常为10或15,但也可以根据实际情况进行调整。每个类别的标签向量长度通常为10或15,但也可以根据实际情况进行调整。

      以下是一个使用Keras构建CNN的多分类问题的示例:

      ```python from keras.models import Sequential from keras.layers import Dense, Flatten from keras.layers import Conv2D, MaxPooling2D from keras.datasets import mnist

      加载数据

      (x_train, y_train), (x_test, y_test) = mnist.load_data()

      数据预处理

      x_train = x_train.reshape(x_train.shape[0], 28, 28, 1) x_test = x_test.reshape(x_test.shape[0], 28, 28, 1) x_train = x_train.astype('float32') / 255 x_test = x_test.astype('float32') / 255

      划分训练集和测试集

      y_train = keras.utils.to_categorical(y_train, 10) y_test = keras.utils.to_categorical(y_test, 10)

      创建模型

      model = Sequential() model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Conv2D(64, (3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Flatten()) model.add(Dense(128, activation='relu')) model.add(Dense(10, activation='softmax'))

      编译模型

      model.compile(loss=keras.losses.categorical_crossentropy, optimizer=keras.optimizersadam, metrics=['accuracy'])

      训练模型

      model.fit(x_train, y_train, batch_size=32, epochs=10, validation_data=(x_test, y_test))

      评估模型

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

      在这个示例中,我们使用了Keras的卷积神经网络(CNN)构建了一个多分类问题。我们首先加载了MNIST数据集,然后将数据预处理为图像形式,并将其划分为训练集和测试集。接着,我们创建了一个CNN模型,并使用训练数据对其进行训练。最后,我们使用测试数据对其进行评估,并打印出测试损失和测试准确率。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部