【问题标题】:Converting list numpy array to normal array for CNN-Keras将列表 numpy 数组转换为 CNN-Keras 的普通数组
【发布时间】:2019-01-05 18:07:01
【问题描述】:

我有一些由文件夹分隔的图像。所以我导入了它们并将它们转换为像素数组。当我输入时:

In [9]: X_train.shape
out [9]: (7467,60,80,3)

我想在这个后面加上编号。类,创建一个数据集并保存为.json 文件并导入一个新的笔记本并为我自己的项目目的进行图像处理。 所以我输入了这段代码:

In [10]: dataset = pd.DataFrame({'label': y_train, 'images': list(X_train)}, 
         columns=['label', 'images'])

但是当我输入时:

In [11]: X_train
Out [11]: array([[[0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.],
        ...,
        [0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.]],

       [[0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.],
        ...,
        [0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.]],

       [[0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.],
        ...,
        [0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.]],

       ...,

但是当我导入 json 文件并显示时:

In [2]: train=pd.read_json('train_file.json')
        train.head()
Out [2]:
 image_no   images
0    7468   [[[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0039215...
1    7469   [[[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0,...
10   7478   [[[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0,...
100  7568   [[[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0,...
1000 8468   [[[0.27058823530000004, 0.1843137255, 0.247058.

..

当我输入时:

In [3]: train['images].values
Out [3]: array([list([[[0.7411764706, 0.7607843137, 0.8274509804], `[0.7215686275000001, 0.7058823529, 0.7882352941], [0.7019607843, 0.6823529412, 0.7843137255], [0.7176470588, 0.7215686275000001, 0.8196078431], [0.8, 0.8352941176, 0.8549019608], [0.8352941176, 0.8666666667, 0.8666666667], [0.8509803922, 0.8745098039, 0.8666666667], [0.8549019608, 0.8745098039, 0.8666666667], [0.8431372549, 0.8666666667, 0.8666666667], [0.8235294118, 0.8705882353000001, 0.8588235294000001], [0.831372549, 0.8705882353000001, 0.8627450980000001], [0.8352941176, 0.831372549, 0.8549019608], [0.7686274510000001, 0.7686274510000001, 0.8117647059], [0.7098039216, 0.7254901961, 0.7803921569000001], [0.7019607843, 0.7333333333000001, 0.8], [0.7254901961, 0.7686274510000001, 0.8392156863], [0.7647058824, 0.7803921569000001, 0.8509803922], [0.7372549020000001, 0.7411764706, 0.8117647059], [0.7098039216, 0.7019607843, 0.7960784314], [0.6980392157, 0.6705882353, 0.8039215686000001], [0.6901960784000001, 0.6823529412, 0.8117647059], [0.6901960784000001, 0.6901960784000001, 0.8196078431], [0.6941176471, 0.6980392157, 0.831372549], [0.6980392157, 0.7058823529, 0.8352941176], [0.7254901961, 0.7490196078, 0.8352941176], [0.8, 0.831372549, 0.8745098039], [0.8431372549, 0.8784313725, 0.8862745098], [0.8509803922, 0.8823529412000001, 0.8862745098], [0.831372549, 0.8352941176, 0.8745098039], [0.7725490196, 0.7411764706, 0.8392156863], [0.7529411765, 0.7294117647, 0.8392156863], [0.7607843137, 0.7764705882, 0.8352941176], [0.8078431373, 0.8392156863, 0.8705882353000001], [0.8274509804, 0.8549019608, 0.8862745098], [0.8117647059, 0.8431372549, 0.8705882353000001], [0.7725490196, 0.8, 0.8352941176], [0.7529411765, 0.7764705882, 0.8431372549], [0.8117647059, 0.8352941176, 0.8862745098], [0.8745098039, 0.8980392157, 0.9176470588000001], [0.8862745098, 0.9098039216, 0.9058823529000001], [0.8823529412000001, 0.9058823529000001, 0.9019607843], [0.8784313725, 0.9098039216, 0.9058823529000001], [0.8666666667, 0.9137254902, 0.9058823529000001], [0.8627450980000001, 0.9176470588000001, 0.9098039216], [0.86274509....`

当我输入时:

In [4]: train['images'].shape
Out [4]: (7467,)

但我可以使用plt.imshow() 绘制这些图像。但是当我尝试直接做model.fit(train['images],y_train) 我收到此错误:

ValueError: 使用序列设置数组元素

那么我哪里错了?将其转储到.json 文件时,或者在导入json 文件后如何将其转换为数组并修复错误。

【问题讨论】:

    标签: python numpy keras deep-learning conv-neural-network


    【解决方案1】:

    将数据帧存储为.json 时,您的np arrays 将转换为列表。要将它们提供给您的 Keras 模型,您需要将它们放在一个形状为 (images, height, width, channels)array 中:

    X_train = np.array(train['images'].tolist())
    

    【讨论】:

    • X_train.shape 仍然是(7467,) 并给出错误Error when checking input: expected conv2d_1_input to have 4 dimensions, but got array with shape (7467, 1)
    • 你是对的。试试:X_train = np.array(train['images'].tolist())。我将编辑我的答案。
    • 嗨,我做了model.predict(X_test),我得到了一个带有概率数组的输出。你知道我如何将它们转换为类号,然后将它们映射到字符串值吗?
    • 转换为二进制标签:(model.predict(X_test) > 0.5).astype(int)。要转换为字符串标签,您可以使用将二进制标签映射到字符串名称的 python 字典。
    • 是的,我已经能够解决这个问题,但新问题是我的模型不断预测只有一个输出类。你知道我该如何解决吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 2019-08-30
    • 1970-01-01
    • 2021-06-09
    • 2020-03-02
    • 2015-01-07
    相关资源
    最近更新 更多