2017-05-11 8 views
1

私はKerasライブラリを使ったキャプチャ認識プロジェクトに取り組んでいます。トレーニングセットでは、以下の関数を使用して最大5桁のキャプチャを生成しています。カラーチャネルのnumpyイメージ配列を再形成する方法

def genData(n=1000, max_digs=5, width=60): 
    capgen = ImageCaptcha() 
    data = [] 
    target = [] 
    for i in range(n): 
     x = np.random.randint(0, 10 ** max_digs) 
     img = misc.imread(capgen.generate(str(x))) 
     img = np.mean(img, axis=2)[:, :width] 
     data.append(img.flatten()) 
     target.append(x) 
    return np.array(data), np.array(target) 

次に、次のようなトレーニングデータの配列を変更しようとしています。

train_data = train_data.reshape(train_data.shape[0], 60, 60, 3) 

私のキャプチャには3つのカラーチャンネルがあると思います。しかし、私がトレーニングデータを再構成しようとしたとき、私は次のエラーに直面しています。

ValueError: cannot reshape array of size 3600000 into shape (1000,60,60,3)

注:私は1ではなく3にしようとするとエラーが発生していないが、私の精度はあなたが平均を取ることによって、単一チャンネルの画像を作成している%1

答えて

1

にも、近くではありません。エラーは、配列の3600000要素が3倍大きい(1000 * 60 * 60 * 3 = 10800000)要素の配列を作り直そうとしているというエラーです。あなたの機能を以下の例に適応させて、機能させてください。

また、イメージの幅を60ピクセルに縮小しているため、ターゲットはもう正しくありません。これは精度が低いことを説明しています。幅を広げてみると、精度が高まる可能性があります(例:150-155)。

def genData(n=1000, max_digs=5, width=60): 
    capgen = ImageCaptcha() 
    data = [] 
    target = [] 
    for i in range(n): 
     x = np.random.randint(0, 10 ** max_digs) 
     img = misc.imread(capgen.generate(str(x))) 
     img = img[:,:width,:] 
     data.append(img.flatten()) 
     target.append(x) 
    return np.array(data), np.array(target) 
+0

ありがとうございます。私は平均を取ることは深さを1に減らすことであることを認識していませんでした。私は同じ構造を続けるでしょうが、私はもう一つ質問があります。私は異なる長さのキャプチャを作成しているので、各画像のサイズは異なります。長さごとにモデルを個別に訓練する必要がありますか? @Wilmar – cano

+0

それは時間と労力を要するでしょう。 capthaのサイズを同じにするようにサイズを変更する方が良いでしょう。しかし、あなたがやっていることは幅を減らすことです。ゼロを追加するか、値を追加することによって、キャプチャの幅が小さすぎる方が良いです。あなたは情報を失うことはありません –

関連する問題