質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

700閲覧

im2col関数の実行におけるattributeErrorの改善方法を教えてください!

tomatoto11

総合スコア10

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/03/08 07:54

python

1import numpy as np 2 3def im2col(images,flt_h,flt_w,out_h,out_w,stride,pad): 4 n_bt,n_ch,img_h,img_w=images.shape 5 6 7 img_pad=np.pad(images,[(0,0),(0,0),(pad,pad),(pad,pad)],"constant") 8 9 cols=np.zeros((n_bt,n_ch,flt_h,flt_w,out_h,out_w)) 10 11 for h in range(flt_h): 12 h_lim=h+stride*out_h 13 14 for w in range(flt_w): 15 w_lim=w+stride*out_w 16 cols[:,:,h,w,:,:]=img_pad[:,:,h:h_lim:stride,w:w_lim:stride] 17 18 cols=cols.transpose(1,2,3,0,4,5).reshape( 19 n_ch*flt_h*flt_w,n_bt*out_h*out_w) 20 return cols 21 22 23img=([[[[1,2,3,4], 24 [5,6,7,8], 25 [9,10,11,12], 26 [13,14,15,16]]]]) 27cols=im2col(img,2,2,3,3,1,0) 28print(cols)

発生している問題・エラーメッセージ

AttributeError Traceback (most recent call last) <ipython-input-2-36a0f56e27d7> in <module>() 3 [9,10,11,12], 4 [13,14,15,16]]]]) ----> 5 cols=im2col(img,2,2,3,3,1,0) 6 print(cols) <ipython-input-1-5e2d443ee39f> in im2col(images, flt_h, flt_w, out_h, out_w, stride, pad) 2 3 def im2col(images,flt_h,flt_w,out_h,out_w,stride,pad): ----> 4 n_bt,n_ch,img_h,img_w=images.shape 5 6 AttributeError: 'list' object has no attribute 'shape'

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

'list'というオブジェクトは、'shape'という属性を持っていません。
'shape'という属性を持っているのは、'np.ndarray'です。numpyの配列です。

img=([[[...]]])の型はlistです。type(img)が'list'を返すはずです。

おそらく4次元配列を定義してそのサイズを'shape'で取得したいのだと思いますので、img=(...)img=np.array(...)に変えてみてください。
そうすると、type(img)は、np.ndarrayを返すはずです。これで'shape'を使うことができます。

投稿2020/03/08 08:11

Matsui_hero

総合スコア346

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomatoto11

2020/03/08 08:17

解答有難うございます!無事解消する事が出来ました!
Matsui_hero

2020/03/08 08:18

あと、蛇足かもしれませんが、for w in range(flt_w):のブロックは一つインデントを入れないと(for h in range(flt_h):の中に入れないと)正常に動かないと思います。
guest

0

下記で解消しますか?
リスト型のimgをNumPy配列ndarrayに変換

python

1cols=im2col(np.array(img),2,2,3,3,1,0)

投稿2020/03/08 08:05

PINTO

総合スコア351

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomatoto11

2020/03/08 08:15

有難うございました!助かりました!
guest

0

ベストアンサー

エラーメッセージから推測するとim2col関数の第一引数imagesはリスト型ではなくnumpy.array型でなければいけないようです。

投稿2020/03/08 08:03

can110

総合スコア38341

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomatoto11

2020/03/08 08:15

皆さん有難うございました!無事解消する事が出来ました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問