Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x CNN输出精度低于50%_Python 3.x_Conv Neural Network_Unsupervised Learning - Fatal编程技术网

Python 3.x CNN输出精度低于50%

Python 3.x CNN输出精度低于50%,python-3.x,conv-neural-network,unsupervised-learning,Python 3.x,Conv Neural Network,Unsupervised Learning,我对在python中使用无监督CNN模型很陌生。我尝试使用CNN模型对无监督的光谱图输入图像进行图像分类。每幅图像的宽度为523,高度为393。我已经尝试了以下代码 X_data = [] files = glob.glob ("C:/train/*.png") for myFile in files: image = cv2.imread (myFile) image_resized = misc.imresize(image, (523,393)) image

我对在python中使用无监督CNN模型很陌生。我尝试使用CNN模型对无监督的光谱图输入图像进行图像分类。每幅图像的宽度为523,高度为393。我已经尝试了以下代码

    X_data = []
files = glob.glob ("C:/train/*.png")
for myFile in files:
    image = cv2.imread (myFile)
    image_resized = misc.imresize(image, (523,393))
    image_resi = misc.imresize(image_resized, (28, 28))
    assert image_resized.shape == (523,393, 3), "img %s has shape %r" % (myFile, image_resized.shape)
    X_data.append (image_resi)

X_datatest = []
files = glob.glob ("C:/test/*.png")
for myFile in files:
    image = cv2.imread (myFile)
    image_resized = misc.imresize(image, (523,393))
    image_resi = misc.imresize(image_resized, (28, 28))
    assert image_resized.shape == (523,393, 3), "img %s has shape %r" % (myFile, image_resized.shape)
    X_datatest.append (image_resi)

input_img = Input(shape=(28,28,3))  

x = Conv2D(32, (3, 3), activation='relu', padding='same')(input_img)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(64, (3, 3), activation='relu', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(32, (3, 3), activation='relu', padding='same')(x)
encoded = MaxPooling2D((2, 2), padding='same')(x)

x = Conv2D(32, (3, 3), activation='relu', padding='same')(encoded)
x = UpSampling2D((2, 2))(x)
x = Conv2D(32, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
x = Conv2D(8, (3, 3), activation='relu')(x)
x = UpSampling2D((2, 2))(x)
decoded = Conv2D(3, (3, 3), activation='sigmoid', padding='same')(x)

autoencoder = Model(input_img, decoded)
autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy', metrics=['accuracy'])
X_data = np.array(X_data)
X_datatest = np.array(X_datatest)
##print('X_data shape:', X_data)   

X_data= X_data.astype('float32') / 255.
X_datatest = X_datatest.astype('float32') / 255.
X_data = np.reshape(X_data, (len(X_data), 28, 28, 3))  # adapt this if using `channels_first` image data format
X_datatest = np.reshape(X_datatest, (len(X_datatest), 28, 28, 3))  # adapt this if using `channels_first` image data format

hist=autoencoder.fit(X_data, X_data,
                     epochs=5,batch_size=128,verbose = 2,validation_data=(X_datatest, X_datatest))
##                callbacks=[TensorBoard(log_dir='/tmp/autoencoder')])
avg = np.mean(hist.history['acc'])
print('The Average Training Accuracy is', avg)
但输出仅为准确度的33%。我不知道为什么。有谁能帮我解决这个问题,让我了解过滤器、内核的数量以及28*28的大小调整基于什么?为什么我们只使用图像大小,这里是523宽和393高

  • 我们没有使用图像大小523x393。在代码中,您可以看到28x28图像总是附加到X_数据和X_数据测试中。我看不出有任何理由先调整到523x393,然后再调整到28x28。(可能是复印件不好?)

  • 您尝试训练的模型是自动编码器。基本上,模型的第一部分(编码器)将尝试将输入图像“编码”为一些抽象的数字向量(
    encoder
    )。该模型的目的是学习图像与该抽象向量之间的良好转换方案,以便该数字向量也包含图像的所有特征

    模型通过在第二部分中解码来学习这一点。
    解码器
    是与图像尺寸相同的输出,如果模型训练完美,则应与输入图像完全匹配

  • 现在是模型的参数。嗯,它因型号而异。您可以决定:

    • 输入图像的尺寸
    • 所需的层数
    • 每层中的过滤器数量
    • 每个过滤器的内核大小
    还有更多。此自动编码器模型的唯一约束是
    解码器
    dims应与
    输入img
    dims匹配

  • 试着阅读一些CNN教程,了解它们是如何工作的。这需要时间,不能在一篇文章中涵盖

    您还应该查看此自动编码器代码的源代码,并查看相应的文章。它将更好地了解这些参数的选择

  • 我们没有使用图像大小523x393。在代码中,您可以看到28x28图像总是附加到X_数据和X_数据测试中。我看不出有任何理由先调整到523x393,然后再调整到28x28。(可能是复印件不好?)

  • 您尝试训练的模型是自动编码器。基本上,模型的第一部分(编码器)将尝试将输入图像“编码”为一些抽象的数字向量(
    encoder
    )。该模型的目的是学习图像与该抽象向量之间的良好转换方案,以便该数字向量也包含图像的所有特征

    模型通过在第二部分中解码来学习这一点。
    解码器
    是与图像尺寸相同的输出,如果模型训练完美,则应与输入图像完全匹配

  • 现在是模型的参数。嗯,它因型号而异。您可以决定:

    • 输入图像的尺寸
    • 所需的层数
    • 每层中的过滤器数量
    • 每个过滤器的内核大小
    还有更多。此自动编码器模型的唯一约束是
    解码器
    dims应与
    输入img
    dims匹配

  • 试着阅读一些CNN教程,了解它们是如何工作的。这需要时间,不能在一篇文章中涵盖


    您还应该查看此自动编码器代码的源代码,并查看相应的文章。它将更好地了解这些参数的选择。

    这是因为您传递的数据集与功能和标签相同
    X_data
    @MassoudHosseinali,因为我没有标签,它是无监督的数据。。我可以将什么设置为标签而不是X_数据?这是因为您传递的是与功能和标签相同的数据集
    X_数据
    @MassoudHosseinali,因为我没有标签,它是无监督的数据。。我可以将什么设置为标签而不是X_数据?