2017-11-08 7 views
0
<!-- language:python--> 
import tensorflow as tf 
import numpy as np 
from tensorflow.python.ops import rnn, rnn_cell 
from tensorflow.contrib.data import Dataset, Iterator 

a = [[0.0,0.0,1.0,1.0,0.0,0.0,1.0,0.0], 
       [0.0,1.0,0.0,1.0,0.0,0.0,0.0,1.0], 
       [1.0,1.0,0.0,0.0,0.0,1.0,1.0,0.0], 
       [1.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0]] 
b = [[0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0], 
       [0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0], 
       [0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0], 
       [0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0]] 

hm_epochs = 3 
n_classes = 4 
batch_size = 4 
chunk_size = 8 
n_chunks = 4 
rnn_size = 128 

x = tf.placeholder('float', [None, n_chunks,chunk_size]) 
y = tf.placeholder('float') 

def next_batch(a,b,batchSize): 
    return [a for _ in range(batchSize)], [b for _ in range(batchSize)] 


def recurrent_neural_network(x): 
    layer = {'weights':tf.Variable(tf.random_normal([rnn_size,n_classes])), 
     'biases':tf.Variable(tf.random_normal([n_classes]))} 

    x = tf.transpose(x) 
    x = tf.reshape(x, [-1, chunk_size]) 
    x = tf.split(x, n_chunks) 

    lstm_cell = rnn_cell.BasicLSTMCell(rnn_size,state_is_tuple=True) 

    outputs, states = rnn.static_rnn(lstm_cell, x, dtype=tf.float32) 

    output = tf.matmul(outputs[-1],layer['weights']) + layer['biases'] 

    return output 

def train_neural_network(x): 

    prediction = recurrent_neural_network(x) 
    cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits = 
prediction,labels=y)) 
    optimizer = tf.train.AdamOptimizer().minimize(cost) 


    with tf.Session() as sess: 
     sess.run(tf.global_variables_initializer()) 

     for epoch in range(hm_epochs): 
      epoch_loss = 0.0 

      for _ in range((1)): 

       epoch_x, epoch_y= 
next_batch(b,a,batch_size) 

       _, c = sess.run([optimizer, cost], feed_dict={x: epoch_x, y: 
epoch_y}) 
       epoch_loss += c 

      print('Epoch', epoch, 'completed out 
of',hm_epochs,'loss:',epoch_loss) 

     correct = tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1)) 

     accuracy = tf.reduce_mean(tf.cast(correct, 'float')) 

     print('Accuracy:',accuracy.eval({x:val_signalGen.reshape((-1, 
n_chunks, chunk_size)), y:val_states})) 

train_neural_network(x) 

私はテンソルフローの学習の初心者です。私はMNISTのチュートリアル(https://pythonprogramming.net/rnn-tensorflow-python-machine-learning-tutorial/)のコードを、単純な配列でMNISTデータセットを置き換えて修正しました。変更されたテンソルフローMNISTチュートリアルコード:エラー:ロットとラベルは同じサイズでなければなりません。

しかし、私が変更されたコードを実行した後、私は以下のようにエラーが発生しました:

Caused by op 'SoftmaxCrossEntropyWithLogits', defined at: 
File ".\stackOverflowAsk.py", line 78, in <module> 
    train_neural_network(x) 
File ".\stackOverflowAsk.py", line 53, in train_neural_network 
    cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits = 
prediction,labels=y)) 
    File "C:\Users\yongx\AppData\Local\Programs\Python\Python35\lib\site- 
packages\tensorflow\python\ops\nn_ops.py", line 1594, in 
softmax_cross_entropy_with_logits 
    precise_logits, labels, name=name) 
    File "C:\Users\yongx\AppData\Local\Programs\Python\Python35\lib\site- 
packages\tensorflow\python\ops\gen_nn_ops.py", line 2380, in _ 
softmax_cross_entropy_with_logits 
    features=features, labels=labels, name=name) 
    File "C:\Users\yongx\AppData\Local\Programs\Python\Python35\lib\site- 
packages\tensorflow\python\framework\op_def_library.py", line 767, in 
apply_op 
    op_def=op_def) 
    File "C:\Users\yongx\AppData\Local\Programs\Python\Python35\lib\site- 
packages\tensorflow\python\framework\ops.py", line 2506, in create_op 
    original_op=self._default_original_op, op_def=op_def) 
    File "C:\Users\yongx\AppData\Local\Programs\Python\Python35\lib\site- 
packages\tensorflow\python\framework\ops.py", line 1269, in __init__ 
    self._traceback = _extract_stack() 
    InvalidArgumentError (see above for traceback): logits and labels must 
be 
same size: logits_size=[4,4] labels_size=[16,8] 
     [[Node: SoftmaxCrossEntropyWithLogits = 
SoftmaxCrossEntropyWithLogits[T=DT_FLOAT, 
_device="/job:localhost/replica:0/task:0/gpu:0"](Reshape_1, Reshape_2)]] 
     [[Node: Mean/_15 = _Recv[client_terminated=false, 
recv_device="/job:localhost/replica:0/task:0/cpu:0", 
send_device="/job:localhost/replica:0/task:0/gpu:0", 
send_device_incarnation=1, tensor_name="edge_962_Mean", 
tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"]()]] 

私は配列由来の私の「ラベル」、「」、形状である(4×4)ことを確認していましたしかし、なぜそれが16x8であることが分かったのですか?

すべてのアドバイスをお待ちしています。ありがとう。

+0

どのラインがクラッシュしているかを示すトレースバックの部分を含めることができますか? また、 "<! - language:python - >"を追加すると、コードの色がきれいになります。 – TheAtomicOption

+0

@ TheAtomicOption、Noted ..トレースバックログを追加しました。私はnoobです。<! - language:python - > ...のようなコードをどのように記述するのかよくわかりません。 – John5012

+0

"<! - language:python - >"引用符)はポストのどこにでも置くことができ、あなたのコードを着色するためにstackoverflowのCSSに信号を送ります。他の言語にも対応しています。コードブロックの外側にあるときは表示されませんが、色にはまだ影響します。 :) – TheAtomicOption

答えて

0

ab変数を使用する前にエラーが発生しています。トレースバックではあなたはそれが起こっている場所を確認することができます

Caused by op 'SoftmaxCrossEntropyWithLogits', defined at: 
File ".\stackOverflowAsk.py", line 78, in <module> train_neural_network(x) 
File ".\stackOverflowAsk.py", line 53, in train_neural_network  
    cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits = prediction, labels = y)) 

つまり、あなたのラベルが実際にy = tf.placeholder('float')として初期化され、変更されることはありません--which yから来て見ることができる - というaからよりも、あなたは決してなっていないしているとして、 aを使用し始めるコード内のポイントに移動します。なぜyが[16,8]と見なされるのかというと、the docs say the default is Nonethe actual codea wrapper for a binaryであることからわからない。しかし、あなたが必要な形を知っているので、私は形を明示的に:y = tf.placeholder('float', shape=(4, 4))としてみようと思います。

関連する問題