首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ValueError:输入数组的形状必须为== (..,..,[ ..,]3),got (28,28,1)

ValueError:输入数组的形状必须为== (..,..,[ ..,]3),got (28,28,1)
EN

Stack Overflow用户
提问于 2020-08-03 23:04:46
回答 1查看 468关注 0票数 2

我正在尝试使用Keras的模型做一些程序,然后用AIX360的Lime explainer (这只是原始LIME的包装器)来解释它。所有数据都是MNIST灰度数字。但在我的例子中,我不能解释这个实例,因为我不知道该向解释器提供什么。

我的代码:

代码语言:javascript
复制
!pip install aix360
!pip install tensorflow==2.2.0

from __future__ import print_function
import warnings
# Supress jupyter warnings if required for cleaner output
warnings.simplefilter('ignore')

import numpy as np
import pandas as pd

import keras
import keras.layers

from keras.utils.np_utils import to_categorical # convert to one-hot-encoding
from keras.models import Sequential # Sequeantial layer addition

from aix360.algorithms.lime import LimeImageExplainer

print('Using keras:', keras.__version__)

# Load dataset
from keras.datasets import mnist
# Tuple of Numpy arrays: (x_train, y_train), (x_test, y_test).
(train, train_labels), (test, test_labels) = mnist.load_data()

# save input image dimensions
img_rows = train.shape[1]
img_cols = train.shape[2]

# Get classes and number of values
value_counts = pd.value_counts(train_labels).sort_index()
num_classes = value_counts.count()

train = train/255
test = test/255

train = train.reshape(train.shape[0], img_rows, img_cols, 1)
test = test.reshape(test.shape[0], img_rows, img_cols, 1)

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(img_rows, img_cols,1)),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(num_classes)
])

model.compile(loss='sparse_categorical_crossentropy',
      optimizer='adam',
      metrics=['accuracy'])

batch_size = 128
epochs = 1

model.fit(train, train_labels,
          batch_size=batch_size,
          epochs=epochs,
          verbose=1,
          validation_data=(test, test_labels))

score = model.evaluate(test, test_labels, verbose=0)

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

limeExplainer = LimeImageExplainer()

limeExplainer.explain_instance(test[0], model.predict_proba)

最后一行是错误所在。不要注意模型是如何训练的,这不是问题。

编辑:编辑代码,希望它可以在codelab中运行(添加了第二行)

EDIT2:完成: tensorflow 2.2.0keras 2.4.3 aix360 0.2.0

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-04 03:26:27

我添加了这个转换,并在RGB图像上进行了训练:

代码语言:javascript
复制
def to_rgb(x):
    x_rgb = np.zeros((x.shape[0], 28, 28, 3))
    for i in range(3):
        x_rgb[..., i] = x[..., 0]
    return x_rgb

train_rgb = to_rgb(train)
test_rgb = to_rgb(test)

它起作用了:

代码语言:javascript
复制
limeExplainer.explain_instance(test_rgb[0], model.predict_proba)
100%
1000/1000 [00:00<00:00, 2598.51it/s]
<lime.lime_image.ImageExplanation at 0x7f8d20381f50>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63231969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档