Neural networkで何か作ってみたいと思い、チュートリアルを参考にして、自分で実装しようと思いました。
チュートリアルと同じことをやっても嫌だなと思ったので固有抽出表現というラベル付けの識別を自分で実装しています。チュートリアルと変わることは、入力するデータ型とくらいです。
チュートリアルでは入力は手書き文字の28x28の画像ベクトルでした。今回はそれが各単語をword2vecにより単語をベクトル化した300次元のベクトルとしました。ラベルに関してはラベル名をid化した18この数字です。
python
import tensorflow as tf import numpy as np batch_size = 100 # バッチの数 #それぞれのtensorを作成する x = tf.placeholder(tf.float32, [None,len(Xvec[0])]) W = tf.Variable(tf.zeros([len(Xvec[0]),len(set(label))])) b = tf.Variable(tf.zeros([len(set(label))])) #モデルの作成 y = tf.nn.softmax(tf.matmul(x, W) + b) #正解を入れるための箱を宣言 y_ = tf.placeholder(tf.float32, [None,len(set(Y))]) #学習の方法を交差エントロピーの減少と設定。 cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1])) #学習方法を勾配降下法と設定 train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy) #sessionを起動 sess = tf.InteractiveSession() tf.global_variables_initializer().run() #batchごとに学習開始 for i in range(0, len(Xvec), batch_size): x_batch = Xvec[i:i+batch_size] y_batch = label[i:i+batch_size] → sess.run(train_step, feed_dict={x: x_batch, y_: y_batch}) #ここで下エラーが出る #ValueError: setting an array element with a sequence.
調べたところnumpyのところでエラーが出てると書いてありました。
データ型がおかしいのかと思い、調べましたがXvecもlabelもどちらもfloat32になっていました。
他に考えられる原因はfeed.dictで与える型がfloat32ではダメなのかと思いました。
また、x_batchの中身が配列になっているのもダメなのではないかと思います。
いろいろ考えたら頭の中がぐちゃぐちゃしてしまいました。解決策がございましたらお願いいたします。
データについて参考となりそうなものを載せておきます。
python
> Xvec.dtype dtype('O') > Xvec[0].dtype dtype('float32') >len(Xvec) 16015 >label.dtype dtype('float32') >Xvec.shape (16009,) >Xvec[0] array([ -2.01150000e-01, 1.67799994e-01, -1.45109996e-01, -1.99019998e-01, 2.93040007e-01, 2.08790004e-01, 3.25360000e-01, ... -4.27370012e-01, -9.79190022e-02, 2.06489995e-01], dtype=float32) >label array([ 1., 9., 9., ..., 16., 16., 16.], dtype=float32)
長くなりましたが、よろしくお願いいたします。
他にも必要なデータがございましたら、いってください。
まだ回答がついていません
会員登録して回答してみよう