【问题标题】:Problems while using ScikitLearn's Neural Network implementation使用 ScikitLearn 的神经网络实现时的问题
【发布时间】:2014-01-17 21:55:41
【问题描述】:

我正在尝试使用 Scikit Learn 提供的神经网络实现来实现图像处理。我有近 10,000 张“JPG”格式的彩色图像,我将这些图像转换为“PNG”格式并删除了颜色信息。新图像都是黑白图像。将这些图像转换为矢量格式后,这些图像矢量形成了神经网络的输入。

对于每个图像,都有一个输出,它构成了神经网络的输出。

输入文件只有 0 和 1 的值,没有其他值。每个图像的输出对应于一个连续的向量,介于 0 和 1 之间,长度为 22。即每个图像的输出是一个长度为 22 的向量。

从处理开始,我只从 100 张图像及其相应的输出开始,得到以下错误:

ValueError: Array contains NaN or infinity

我还要指出,第一次迭代在这里完成,第二次迭代时遇到了这个错误。

为了尝试不同的东西,我将输入和输出分别缩减为 10 张图像。使用相同的代码(即将推出),我能够完成 7 次迭代(我已将迭代次数设置为 20),然后收到相同的错误。

然后我将迭代次数更改为 5,只是为了检查它是否有效。更改后,我收到以下错误:

ValueError: bad input shape (10, 22)

我还尝试在我的输入和输出上使用np.reval(),但这又给了我NaN or Infinity 错误。

这是我在整个过程中使用的代码:

import numpy as np
import csv
import matplotlib.pyplot as plt
from scipy.ndimage import convolve
from sklearn import linear_model, datasets, metrics
from sklearn.cross_validation import train_test_split
from sklearn.neural_network import BernoulliRBM
from sklearn.pipeline import Pipeline


def ReadCsv(fileName):
    in_file = open(fileName, 'rUb')
    reader = csv.reader(in_file, delimiter=',', quotechar='"')
    data = [[]]
    for row in reader:
        data.append(row)

    data.pop(0)
    return data

X_train = np.asarray(ReadCsv('100Images.csv'), 'float32')
Y_train = np.asarray(ReadCsv('100Images_Y_new.csv'), 'float32')
X_test = np.asarray(ReadCsv('ImagesForTest.csv'), 'float32')
Y_test = np.asarray(ReadCsv('ImagesForTest_Y_new.csv'), 'float32')

logistic = linear_model.LogisticRegression()
rbm = BernoulliRBM(random_state=0, verbose=True)

classifier = Pipeline(steps=[('rbm', rbm), ('logistic', logistic)])

rbm.learning_rate = 0.06
rbm.n_iter = 5

rbm.n_components = 100
logistic.C = 6000.0

classifier.fit(X_train, Y_train)

print()
print("Logistic regression using RBM features:\n%s\n" % (
    metrics.classification_report(
        Y_test,
        classifier.predict(X_test))))

对于这个问题,我非常感谢任何形式的帮助。

TIA。

【问题讨论】:

  • 请至少始终提供您遇到的错误的完整回溯。否则,您如何期望人们能够猜测错误发生的时间/地点?我们无权访问您的数据,示例 provided in the library 执行时不会出现此类错误。您的问题必须与您的代码或数据有关。由于我们没有数据,而且您没有提供自包含的简约复制案例,我们无法凭空猜测。
  • 还请提供更详细的数据描述,例如:print(X_train.shape); print(np.max(X_train)); print(np.min(X_train)); print(np.mean(X_train, axis=0)); print(np.std(X_train, axis=0))的输出
  • rbm.learning_rate设置为较小的值是否会出现错误?
  • 请发布“NaN 或无穷大”异常的完整回溯。
  • 你有没有尝试过这个非常小的学习率,0.000001。

标签: python image image-processing neural-network scikit-learn


【解决方案1】:

将学习率更改为较小的值可能会解决此问题。 (即 rbm.learning_rate)

至少这解决了我之前遇到的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-05
    • 2016-02-18
    • 2016-02-19
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 2011-02-22
    • 2012-08-05
    相关资源
    最近更新 更多