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

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

ただいまの
回答率

90.76%

  • Python

    6914questions

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

theanoを使ってニューラルネットワーク の実装でハマりました。

受付中

回答 0

投稿

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

Tsukuni

score 12

python,機械学習初心者です。
ニューラルネットワークを実装してあるコードをもらい、それを別のものに適応しようと思い変更を加えているのですが、詰まってしまいました。
入力データの設定がおかしいのかなと思ったのですが、わかりませんでした。わかる方がいれば教えていただけると嬉しいです。

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

Traceback (most recent call last):
  File "homework.py", line 207, in <module>
    loss = func_update(x,t)
  File "/Users/t/.pyenv/versions/anaconda-2.1.0/lib/python2.7/site-packages/theano/compile/function_module.py", line 917, in __call__
    storage_map=getattr(self.fn, 'storage_map', None))
  File "/Users/t/.pyenv/versions/anaconda-2.1.0/lib/python2.7/site-packages/theano/gof/link.py", line 325, in raise_with_op
    reraise(exc_type, exc_value, exc_trace)
  File "/Users/t/.pyenv/versions/anaconda-2.1.0/lib/python2.7/site-packages/theano/compile/function_module.py", line 903, in __call__
    self.fn() if output_subset is None else\
ValueError: number of rows in x (1) does not match length of y (3)
Apply node that caused the error: CrossentropySoftmaxArgmax1HotWithBias(Dot22.0, b, t)
Toposort index: 15
Inputs types: [TensorType(float64, matrix), TensorType(float64, vector), TensorType(int64, vector)]
Inputs shapes: [(1, 3), (3,), (3,)]
Inputs strides: [(24, 8), (8,), (8,)]
Inputs values: [array([[ 0.29324024, -0.40678503,  0.03681703]]), array([0., 0., 0.]), array([1, 0, 0])]
Outputs clients: [[Sum{acc_dtype=float64}(CrossentropySoftmaxArgmax1HotWithBias.0)], [CrossentropySoftmax1HotWithBiasDx(Elemwise{Inv}[(0, 0)].0, CrossentropySoftmaxArgmax1HotWithBias.1, t)], []]

HINT: Re-running with most Theano optimization disabled could give you a back-trace of when this node was created. This can be done with by setting the Theano flag 'optimizer=fast_compile'. If that does not work, Theano optimizations can be disabled with 'optimizer=None'.
HINT: Use the Theano flag 'exception_verbosity=high' for a debugprint and storage map footprint of this apply node.

 入力と教師データ

#data_x
[[5.1 3.5 1.4 0.2]
 [4.9 3.  1.4 0.2]
  ......
 [4.7 3.2 1.3 0.2]
 [4.6 3.1 1.5 0.2]]
#data_t
[[0 0 1]
 [0 1 0]
  .....
 [0 0 1]
 [0 0 1]]

 該当のソースコード

from __future__ import print_function

import numpy

import theano
import theano.tensor as T
import csv

class Linear(object):


    def __init__(self, n_in, n_out):

        # モデルパラメータの初期値を設定

        W_values = numpy.asarray(numpy.random.normal(
            0, numpy.sqrt(1. / n_in), (n_in, n_out)),
            dtype=theano.config.floatX)
        b_values = numpy.zeros((n_out,), dtype=theano.config.floatX)

        self.W = theano.shared(value=W_values, name='W')
        self.b = theano.shared(value=b_values, name='b')

    def __call__(self, x):
        return T.dot(x, self.W) + self.b

# MLP モデルを定義しよう

class MnistMLP(object):

    # モデルパラメータ (重み行列やバイアスベクトル) 

    def __init__(self, n_in, n_units, n_out):
        self.l1=Linear(n_in, n_units)
        self.l2=Linear(n_units, n_units)
        self.l3=Linear(n_units, n_out)

    def __call__(self, x):
        h1 = T.nnet.sigmoid(self.l1(x))
        h2 = T.nnet.sigmoid(self.l2(h1))
        return T.nnet.softmax(self.l3(h2))
# 設定変数
n_epoch = 10
n_units = 5
lr = 0.1

data = numpy.array([[ float(elm) for elm in v] for v in csv.reader(open("fisheriris.csv", "r"))])

data_x,data_t1= numpy.hsplit(data,[4])

data_t = numpy.zeros((data_t1.shape[0],3),dtype = int)
for i in range(0,data_t.shape[0]):
    if data_t1[i] == 1:
        data_t[i,0] = 1
    elif data_t1[i] == 2:
        data_t[i,1] = 1
    else:
        data_t[i,2] = 1

N_data = data_t.shape[0]
print(data_t)
print(data_x)


x = T.dmatrix('x')
t = T.lvector('t')

# モデルを定義しよう

model = MnistMLP(4,n_units,3)


y = model(x)

equ_loss = T.mean(T.nnet.categorical_crossentropy(y,t))


equ_grad = T.grad(equ_loss,[model.l1.W, model.l1.b,
                            model.l2.W, model.l2.b,
                            model.l3.W, model.l3.b])


equ_update=[(model.l1.W, model.l1.W - lr*equ_grad[0]),
            (model.l1.b, model.l1.b - lr*equ_grad[1]),
            (model.l2.W, model.l2.W - lr*equ_grad[2]),
            (model.l2.b, model.l2.b - lr*equ_grad[3]),
            (model.l3.W, model.l3.W - lr*equ_grad[4]),
            (model.l3.b, model.l3.b - lr*equ_grad[5])]


func_update=theano.function(inputs=[x,t],outputs=equ_loss,updates=equ_update)


func_loss=theano.function(inputs=[x,t],outputs=equ_loss)

equ_acc=(1.0-T.mean(T.neq(T.argmax(y,axis=1),t)))

func_acc=theano.function(inputs=[x,t],outputs=equ_acc)


for epoch in range(1, n_epoch + 1):
    print('epoch', epoch)

    sum_loss = 0.0
    sum_accuracy = 0.0
    perm = numpy.random.permutation(N_data)

    for i in range(0, N_data):

        x = numpy.asarray([data_x[i]])
        t = numpy.asarray(data_t[i])


        loss = func_update(x,t)



        acc = func_acc(x,t)


        sum_loss += float(loss) * len(t)
        sum_accuracy += float(acc) * len(t)


    print('train mean loss={}, accuracy={}'.format(
        sum_loss / N_data, sum_accuracy / N_data))


sum_loss = 0.0
sum_accuracy = 0.0
for i in range(0, N_data, batchsize):

    x = numpy.asarray(data_x[perm[i:i + batchsize]])
    t = data_t[perm[i:i + batchsize]]

    loss = func_loss(x,t)

    acc = func_acc(x,t)

    sum_loss += float(loss) * len(t)
    sum_accuracy += float(acc) * len(t)

print('test  mean loss={}, accuracy={}'.format(
    sum_loss / N_data, sum_accuracy / N_data))
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

まだ回答がついていません

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

  • ただいまの回答率 90.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    Tensorflowのfully_connected_feedの実行にエラーが続く

    tensoflowのfully_connected_feed.pyを実行しようとしているのですが、どう試行錯誤してもエラーが続きます。 tensorflowのインストールの仕方、

  • 解決済

    機械学習の精度が上がらない

    前提・実現したいこと tensorflowを使ったテストプログラムを作成し、機械学習に必要十分なデータ量がどれだけなのか、その感覚を掴みたい、またはそのデータ量を推定するための見当

  • 受付中

    Tensorflowで異なるセッションでのrestoreして値の復元する際に、uninitializ...

    savar.save()で保存した値を異なるセッションでrestore()する際に初期化しているにも関わらず初期化されていない(uninitialize)とエラーが表示される。 4

  • 解決済

    cythonの型定義

    cythonファイルに型を定義したいです もともとのpyxファイルと 自分で型を定義したときのコードをのせます gamma1.pyx from math import exp

  • 解決済

    複数行列への分割について

    Pythonによる複数行列の解析に関する質問です。 4行n列の.txtファイルを読み込んで分割を行いたいと考えています。 txtファイルは下記のような内容です。 531 1 1

  • 解決済

    tensorflowでのalexnetの実装で精度が変化しない

    前提・実現したいこと こんにちは。 趣味で画像認識を勉強しているものです。 「tensorflowでゆるゆりの製作会社を判定してみた」(http://mobiles-han.blo

  • 解決済

    ゼロから学ぶDeepLearning 4章についての質問

    前提・実現したいこと 現在ゼロから学ぶDeepLearningを使用して機械学習について勉強しています。 その中で、第四章の二層のネットワーク作成で躓いてしまったことがありました。

  • 解決済

    高階関数の構造が理解できません。

    Python初心者です。書籍を購入して勉強していますが、内容を読んでも意味が分からない箇所があったので質問します。 書籍:Pythonプログラミング パーフェクトマスター (秀

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

  • Python

    6914questions

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