

初めて質問致します。初心者ですがよろしくお願いします  
以下のプログラムを実行するとその下に示した結果のようになり改善点がわかりません  
何かアドバイスをいただければと思い質問しています何卒よろしくお願いします  
入力データのファイルは

[code]

    12.1
    42.2
    32.2
    15.2
    
[/code]

という感じのデータになってます  
出力も同じ感じで出力したいと思っています

[code]

    # -*- coding: utf-8 -*-
    
    import tensorflow as tf     #NN用ライブラリであるtensorflowをインポート
    
    import numpy as np      #計算用ライブラリであるnumpyをインポート
    
    '''----------------------モデル定義---------------------------------'''
     #入力層のユニット数
    num_units1 = 10  #中間層1のユニット数
    
    x=tf.placeholder(tf.float32,[1, 720])       #入力層
    
    w_enc = tf.Variable(tf.random_normal([720, num_units1], stddev=0.01))   #入力側の重み
    b_enc = tf.Variable(tf.zeros([num_units1]))             #入力側のバイアス
    
    w_dec = tf.Variable(tf.random_normal([num_units1,720], stddev=0.01))    #出力側の重み
    b_dec = tf.Variable(tf.zeros([720]))                #出力側のバイアス
    
    encoded = tf.nn.relu(tf.matmul(x, w_enc) + b_enc)       #入力側活性化関数(ReLU)
    
    #drop=tf.nn.dropout(encoded,0.5)                #dropout
    
    decoded = tf.matmul(encoded, w_dec) + b_dec         #出力側活性化関数(恒等写像)
    
    lambda2 = 0.1                               #正則化係数
    l2_norm = tf.nn.l2_loss(w_enc) + tf.nn.l2_loss(w_dec)           #L2正則化
    loss1 = tf.reduce_sum(tf.square(x - decoded)) + lambda2 * l2_norm   #損失関数(二乗誤差関数)
    
    loss2= tf.abs(tf.reduce_sum(decoded - x) / tf.reduce_sum(x)) * 100      #百分率で表した誤差
    
    train_step = tf.train.AdamOptimizer(learning_rate=0.0001).minimize(loss1)   #勾配降下法(Adam)
    
    '''--------------変数の初期化とVLFデータの読み込み---------------'''
    
    sess = tf.InteractiveSession()          #セッション開始を変数に定義
    sess.run(tf.global_variables_initializer()) #変数初期化
    
    a = np.loadtxt("train_datasin125.txt")        #訓練データを読み込む
    
    b = np.loadtxt("sintest_data11.txt")        #テストデータ１を読み込む
    
    c = np.loadtxt("sintast_data2.txt")     #テストデータ２を読み込む
    
    '''-------------------------学習開始---------------------------'''
    
    for step in range(1000000):             #学習回数
        r = a[np.random.randint(0, 2000, [1])]          #訓練データの中からランダムに１日分のデータを選出
    
        sess.run(train_step, feed_dict={x:r})       #学習セッション開始
        if step%49==0:                  #５０回学習するごとに
            loss_val = sess.run(loss2, feed_dict={x:r}) #百分率で表した誤差を算出
            print('Step: %d, Loss: %f'%(step,loss_val)) #現在の学習回数と誤差を表示
    
        if step%499==0:                 #学習回数５００回ごとに
    
            '''-------------------現在の学習回数を格納---------------------'''
    
            if step==0:
                out_g=step+1
            else:
                out_g=np.column_stack([out_g,step+1])
    
            '''------------------教師データの最大誤差算出------------------'''
            max = 0
            for i in range(2000):
                r = a[i, :]
                r = r.reshape(1, 720)
                loss_val = sess.run(loss2, feed_dict={x: r})
                if max<loss_val:
                    max=loss_val
                if i==1999:
                    if step == 0:
                        out1 = max
                    else:
                        out1 = np.column_stack([out1, max])
    
            '''--------------テストデータ１の最大誤差算出------------------'''
    
            max = 0
            for q in range(30):
                r = c[q, :]
                r = r.reshape(1, 720)
                loss_val = sess.run(loss2, feed_dict={x: r})
                if max < loss_val:
                    max = loss_val
                if q == 29:
                    if step == 0:
                        out3 = max
                    else:
                        out3 = np.column_stack([out3, max])
    
            '''--------テストデータ２の最大誤差と推定日数の算出--------'''
    
            max = out3
            count=0
            for p in range(48):
                r = b[p, :]
                r = r.reshape(1, 720)
                loss_val = sess.run(loss2, feed_dict={x: r})
                if max<loss_val:
                    count=count+1
                if p==47:
                    if step == 0:
                        out2 = max
                        out4=count
                    else:
                        out2 = np.column_stack([out2, max])
                        out4 = np.column_stack([out4, count])
    
    '''------------------テキストファイルを出力--------------------'''
    
    out=np.column_stack([out_g.T,out1.T,out2.T,out3.T])
    np.savetxt("sinoutput110.txt",out)
    
    out=np.column_stack([out4.T])
    np.savetxt("sinoutput010.txt",out)
    
[/code]

実行結果

[code]

    /Users/ishidatakuma/PycharmProjects/sotsuken/venv/bin/python /Users/ishidatakuma/PycharmProjects/sotsuken/jikkenn2.py
    Step: 0, Loss: 147.256897
    Step: 49, Loss: 2897.626221
    Step: 98, Loss: 18581.408203
    Step: 147, Loss: 33576.679688
    Step: 196, Loss: 36586.777344
    Step: 245, Loss: 20837.001953
    Step: 294, Loss: 101844.562500
    Step: 343, Loss: 16776.875000
    Step: 392, Loss: 5594.307129
    Step: 441, Loss: 20111.017578
    Step: 490, Loss: 5526.880859
    Traceback (most recent call last):
      File "/Users/ishidatakuma/PycharmProjects/sotsuken/jikkenn2.py", line 107, in <module>
        if yosino<loss_val:
    ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
    
[/code]


CC BY-SA 4.0
2019-01-18T08:12:47.337
52075
2019-04-04T01:40:48.913
2019-04-04T01:40:48.913
29826
31832
question
python python3
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() というエラーが出る


おそらく、`yosino` `loss_val` のどちらか、あるいは両方がリストか配列なのでは？  
複数の値が含まれているのに、単純な式で比較しようとしているから発生するのだと思われます。  
何か厳密に比較または判定できる関数とかサブルーチンを使うか作るかすれば良いのでは？

この辺の記事の説明が当てはまりそうです。  
[Python 初心者です。
条件分岐のある関数を定...](https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14160325114)

[value errorが出てしまい、対処法が分かりません。](https://teratail.com/questions/136849)

[numpyの多次元配列の比較時に発生するエラーについて](http://nishidy.hatenablog.com/entry/2016/04/23/120519)

[Use a.any() or a.all()](https://stackoverflow.com/q/34472814/9014308)


CC BY-SA 4.0
2019-01-18T09:03:11.770
52077
2019-01-18T09:03:11.770
26370
52075
answer