1
私の仕事はVGGベースのネットワークを通して顕著性マップを得ることです。 しかし、私が想像しているように、ミスの損失は減少しません。だから、なぜ私の損失が減少しないのか分かりません。 ps。トレーニングデータセットはSALICONです。 は、ここに出力です:VGGベースのモデルを訓練して顕著性マップを得るときに損失が減少しない
training epoch 1, loss value is 0.041423566639423
training epoch 2, loss value is 0.041423123329878
training epoch 3, loss value is 0.041430559009314
training epoch 4, loss value is 0.041424177587032
...
training epoch 20, loss value is 0.041416928172112
そして私は率、損失関数を学習し、オプティマイザを変更しようと、誰もが働きません。
def shuffle(photo, grdtr, shuffle=True):
idx = np.arange(0, len(photo))
if shuffle:
np.random.shuffle(idx)
photo_shuffle = [photo[i] for i in idx]
grdtr_shuffle = [grdtr[i] for i in idx]
return np.asarray(photo_shuffle), np.asarray(grdtr_shuffle)
if __name__ == '__main__':
# create the model
x = tf.placeholder(tf.float32, [None, 48, 64, 3])
y_ = tf.placeholder(tf.float32, [None, 48 * 64, 1])
h = tf.placeholder(tf.float32, [None, 48, 64, 1])
y = deepnn(x)
# define loss and optimizer
# cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=(tf.clip_by_value(y,1e-8,tf.reduce_max(y))), labels=y_))
y_ = tf.nn.softmax(y_, dim=1)
cross_entropy = tf.reduce_mean(tf.pow(y - y_, 2))
# cross_entropy = tf.reduce_mean(y_ * tf.log(y_/y)) #KL
tf.summary.scalar('loss', cross_entropy)
train_step = tf.train.AdamOptimizer(learning_rate = 0.001, beta1 = 0.9, beta2 = 0.999).minimize(cross_entropy)
# do the training
with tf.Session() as sess:
...
# load the training data
photos = np.load('./data/npy/SALICON100/photos_queue.npy')
grdtrs = np.load('./data/npy/SALICON100/grdtrs_queue.npy')
photos = photos/255.0
grdtrs = grdtrs/255.0
EPOCH = 20
BATCH_SIZE = 20
TRAINING_SET_SIZE = 20
for j in range(EPOCH):
# photos, grdtrs = shuffle(photos, grdtrs, shuffle=False)
grdtrs = np.resize(grdtrs, [TRAINING_SET_SIZE, 48, 64, 20])
grdtrs = np.reshape(grdtrs,[TRAINING_SET_SIZE, 48 * 64, 20])
_, loss_value, pred_y = sess.run([train_step, cross_entropy,y],feed_dict={x: photos[:20], y_: grdtrs[:20]})
if (j + 1) % 1 == 0:
print('training epoch %d, loss value is %.15f' % (j + 1, loss_value))
np.save('./data/20_photos_test/net_output.npy', pred)
np.save('./data/20_photos_test/net_grdtrs.npy', grdtrs[:20])
# stop the queue threads and properly close the session
...
そして私は、SESにおけるテンソルについてのいくつかのコード入れ: はここに私のコードです、あなたが実際にあなたの列車のステップを実行することはありません投稿のコードでは
x = tf.placeholder(tf.float32, [None, 48, 64, 3])
y_ = tf.placeholder(tf.float32, [None, 48 * 64, 1])
y = deepnn(x)
cross_entropy = tf.reduce_sum(tf.pow(y-y_sm,2))
申し訳ありませんが、実際には 'sess.run'を呼び出していますので、私は' loss_value'を得ることができます。私は前に私の質問に 'sess.run'を投稿しませんでした。そのために残念。 –
実際のトレーニングコードはコードスニペットに含まれていません。関連するコードを投稿しないと、あなたがしていることを伝えるのは難しいです。たとえば、あなたのコードではloss_valueが割り当てられていません。 –
しかし、私はここにあまりにも多くのコードですbecuzより多くのコードを入力することはできません。 –