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

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

ただいまの
回答率

90.48%

  • Python 3.x

    6938questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Chainer

    150questions

    Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

[python3]scikit-learnの機械学習

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 299

SKMT

score 30

情報系学生です。Pythonめちゃくちゃ初心者です。

 前提・実現したいこと

プログラムをいじってる途中でエラーが出てしまい、原因がよくわからず困っています

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

/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/chainer/_environment_check.py:38: UserWarning: Accelerate has been detected as a NumPy backend library.
vecLib, which is a part of Accelerate, is known not to work correctly with Chainer.
We recommend using other BLAS libraries such as OpenBLAS.
For details of the issue, please see
https://docs.chainer.org/en/stable/tips.html#mnist-example-does-not-converge-in-cpu-mode-on-mac-os-x.

Also note that Chainer does not officially support Mac OS X.
Please use it at your own risk.

  ''')  # NOQA
-----------------------------------------------------------
epoch 1
Traceback (most recent call last):
  File "iris.py", line 99, in <module>
    y=model(image_batch)
  File "iris.py", line 56, in __call__
    h1=F.dropout(F.sigmoid(self.l1(x)))
  File "/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/chainer/links/connection/linear.py", line 129, in __call__
    return linear.linear(x, self.W, self.b)
  File "/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/chainer/functions/connection/linear.py", line 175, in linear
    y, = LinearFunction().apply(args)
  File "/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/chainer/function_node.py", line 230, in apply
    self._check_data_type_forward(in_data)
  File "/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/chainer/function_node.py", line 298, in _check_data_type_forward
    self.check_type_forward(in_type)
  File "/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/chainer/functions/connection/linear.py", line 20, in check_type_forward
    x_type.shape[1] == w_type.shape[1],
  File "/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/chainer/utils/type_check.py", line 524, in expect
    expr.expect()
  File "/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/chainer/utils/type_check.py", line 482, in expect
    '{0} {1} {2}'.format(left, self.inv, right))
chainer.utils.type_check.InvalidType: 
Invalid operation is performed in: LinearFunction (Forward)

Expect: in_types[0].shape[1] == in_types[1].shape[1]
Actual: 30 != 4

 該当のソースコード

# -*- coding: utf-8 -*-
import numpy as np
import chainer.functions as F
import chainer.links as L
from chainer import cuda,Variable,optimizers,Chain
from chainer import Function
from sklearn.datasets import load_breast_cancer
import chainer
import random
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt

print('-----------------------------------------------------------')

cancer=load_breast_cancer()
image_train=[]
image_test=[]
label_train=[]
label_test=[]

image=cancer.data
label=cancer.target

N=len(cancer.data)


perm=np.random.permutation(N)

image =  np.asarray(cancer.data[perm])
label =  np.asarray(cancer.target[perm])

image_train=np.array(image[0:int(len(image)*0.8)], dtype=np.float32)
image_test=np.array(image[int(len(image)*0.8):len(image)], dtype=np.float32)
label_train=np.array(label[0:int(len(label)*0.8)], dtype=np.float32)
label_test=np.array(label[int(len(label)*0.8):len(label)], dtype=np.float32)

N_train=len(label_train)
N_test=len(label_test)



batchsize=1
epoch=200   #epoch数

class Model(Chain):
    def __init__(self):
        super(Model, self).__init__(
            l1=L.Linear(4,30),
            l2=L.Linear(30,20),
            l3=L.Linear(20,10),
            l4=L.Linear(10,3)
        )
    def __call__(self,x):
        x= chainer.Variable(x)
        h1=F.dropout(F.sigmoid(self.l1(x)))
        #F.dropout()を消すとdropoutなしになる
        h2=F.dropout(F.sigmoid(self.l2(h1)))
        #発火関数にシグモイド関数を選択  relu
        h3=F.dropout(F.sigmoid(self.l3(h2)))

        h4=self.l4(h3)
        return h4


model=Model()

optimizer = optimizers.MomentumSGD()    #optimizerの選択可能  .Adam() ,.SGD
optimizer.setup(model)

y2=[]
y_array=[]

train_result = []
test_result = []
train_result2 = []
test_result2 = []

sum = 1
cul_loss=0.0
cul_acc=0.0
all_loss=0.0
all_acc=0.0

for epoch in range(1,epoch+1):
    print ('epoch',epoch)
    perm=np.random.permutation(N_train)

    sum_loss=0
    sum_accuracy=0


    for i in range(0,N_train):
        image_batch =  np.asarray(image_train[perm[i:i+1]])
        label_batch =  np.asarray(label_train[perm[i:i+1]])

        model.cleargrads()

        y=model(image_batch)

        image_batch=chainer.Variable(image_batch)
        label_batch=chainer.Variable(label_batch)

        label_batch1 = np.array(label_batch.data,dtype='int32')

        loss=F.softmax_cross_entropy(y, label_batch1)
        #誤差関数としてソフトマックス関数を選択している
        acc=F.accuracy(y, label_batch1)


        loss.backward()
        optimizer.update()

        sum_loss     += float(cuda.to_cpu(loss.data)) * batchsize
        sum_accuracy += float(cuda.to_cpu(acc.data)) * batchsize


    print ('train mean loss={}, accuracy={}'.format(sum_loss / N_train, sum_accuracy / N_train))
    train_result.append(sum_loss/N_train)
    train_result2.append(sum_accuracy/N_train)

 試したこと

ネットでエラーメッセージやコードについて調べて見ましたが、解決策が見つかりません

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

Modelクラス__init__関数内、

super(Model, self).__init__(
     l1=L.Linear(4,30),
     l2=L.Linear(30,20),
     l3=L.Linear(20,10),
     l4=L.Linear(10,3)
)


のl1で定義されている入力数としたのネストされた内側のforで定義されているimage_batchの要素数があっていません。
l1で入力サイズが4のレイヤーを定義しているのに、個々の学習データのサイズが30あるのでエラーになっています。設計を見直してください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

同じタグがついた質問を見る

  • Python 3.x

    6938questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Chainer

    150questions

    Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。