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

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

新規登録して質問してみよう
ただいま回答率
85.47%
Python

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

Q&A

0回答

1356閲覧

pythonのtensorflowで交差検定を行う際にエラーがでる

kkhuji

総合スコア4

Python

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

0グッド

0クリップ

投稿2019/12/14 07:38

前提・実現したいこと

一般的に用いられる交差検定は、データをトレーニングとテストに分けてトレーニングデータで訓練し損失関数にトレーニングデータの実ラベルとの出力誤差を最小化し、テスト用データでそのモデルを評価する一連の流れだと思うが、今回実装したいコードはトレーニングデータで訓練し、損失関数にテストデータの実ラベルとの出力誤差の最小化を行いたい。

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

エラーメッセージ `No gradients provided for any variable, check your graph for ops that do not support gradients, between variables ["<tf.Variable 'Variable:0' shape=() dtype=float32_ref>", "<tf.Variable 'Variable_1:0' shape=(564, 512) dtype=float32_ref>", "<tf.Variable 'Variable_2:0' shape=(512,) dtype=float32_ref>", "<tf.Variable 'Variable_3:0' shape=(512, 128) dtype=float32_ref>", "<tf.Variable 'Variable_4:0' shape=(128,) dtype=float32_ref>", "<tf.Variable 'Variable_5:0' shape=(128, 2) dtype=float32_ref>", "<tf.Variable 'Variable_6:0' shape=(2,) dtype=float32_ref>"] and loss Tensor("Assign:0", shape=(), dtype=float32_ref). ` ### 該当のソースコード cross_entropy = -tf.reduce_sum(y_ * tf.log(y)) custom_loss = tf.assign(v, sess.run(cross_entropy, feed_dict={x: feature1, y_: box1})) train_step = tf.train.GradientDescentOptimizer(0.01).minimize(custom_loss)
###  ソースコード # number for CV fold_num = 5 num_classes = 2 epochs = 500 # fix random seed for reproducibility seed = 7 numpy.random.seed(seed) # load features feature = pd.read_csv('test.csv' ,usecols = range(1, 565), header=0) x = df(feature) #load label label = pd.read_csv('test1.csv', usecols=[8], header=0) y = df(label) partner_id = pd.read_csv('test1.csv', usecols=[0], header=0) z = df(partner_id) z = z.values.tolist() #Formatting data x_train = x.astype(np.float) y_train = y.astype(np.float) X = x_train.values Y = y_train.values # define X-fold cross validation kfold = StratifiedKFold(n_splits=fold_num, shuffle=True, random_state=seed) cvscores = [] # input x = tf.placeholder(tf.float32, [None, 564]) # label y_ = tf.placeholder(tf.float32, [None, 2]) v = tf.Variable(1.0) # FC1 W1 = tf.Variable(tf.random_normal([564, 512], mean=0.0, stddev=0.05)) b1 = tf.Variable(tf.zeros([512])) # layer output h1 = tf.nn.sigmoid(tf.matmul(x, W1) + b1) # FC2 W2 = tf.Variable(tf.random_normal([512, 128], mean=0.0, stddev=0.05)) b2 = tf.Variable(tf.zeros([128])) # layer output h2 = tf.nn.relu(tf.matmul(h1, W2) + b2) # FC3 W3 = tf.Variable(tf.random_normal([128, 2], mean=0.0, stddev=0.05)) b3 = tf.Variable(tf.zeros([2])) # output y = tf.nn.softmax(tf.matmul(h2, W3) + b3) sess = tf.Session() init = tf.global_variables_initializer() sess.run(init) for train, test in kfold.split(X, Y): feature = df(X[train]) feature1 = df(X[test]) box = [] for i in Y[train]: if i == 0: box.append([1, 0]) elif i == 1: box.append([0, 1]) box1 = [] for i in Y[test]: if i == 0: box1.append([1, 0]) elif i == 1: box1.append([0, 1]) # training cross_entropy = -tf.reduce_sum(y_ * tf.log(y)) custom_loss = tf.assign(v, sess.run(cross_entropy, feed_dict={x: feature1, y_: box1})) train_step = tf.train.GradientDescentOptimizer(0.1).minimize(custom_loss) for step in range(500): sess.run(train_step, feed_dict={x: feature, y_: box}) predict = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1)) accuracy = tf.reduce_mean(tf.cast(predict, tf.float32)) # テストデータを使って、正解率を求める acc = sess.run(accuracy, feed_dict={x: feature1, y_: box1}) print("正解率=", acc)

試したこと

問題としては、トレーニングに使う引数と損失計算に使う引数を別々のものにできるかであると思っています。

custom_loss , cross_entropy それぞれをprintして中にテンソル値が入っていることは確認できます。

補足情報(FW/ツールのバージョンなど)

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問