国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術文章
文章詳情頁

python - 使用TensorFlow創(chuàng)建邏輯回歸模型訓練結果為nan

瀏覽:134日期:2022-06-27 15:39:49

問題描述

在TensorFlow中,我想創(chuàng)建一個邏輯回歸模型,代價函數(shù)如下:

python - 使用TensorFlow創(chuàng)建邏輯回歸模型訓練結果為nan

使用的數(shù)據(jù)集截圖如下:

python - 使用TensorFlow創(chuàng)建邏輯回歸模型訓練結果為nan

我的代碼如下:

train_X = train_data[:, :-1]train_y = train_data[:, -1:]feature_num = len(train_X[0])sample_num = len(train_X)print('Size of train_X: {}x{}'.format(sample_num, feature_num))print('Size of train_y: {}x{}'.format(len(train_y), len(train_y[0])))X = tf.placeholder(tf.float32)y = tf.placeholder(tf.float32)W = tf.Variable(tf.zeros([feature_num, 1]))b = tf.Variable([-.3])db = tf.matmul(X, tf.reshape(W, [-1, 1])) + bhyp = tf.sigmoid(db)cost0 = y * tf.log(hyp)cost1 = (1 - y) * tf.log(1 - hyp)cost = (cost0 + cost1) / -sample_numloss = tf.reduce_sum(cost)optimizer = tf.train.GradientDescentOptimizer(0.1)train = optimizer.minimize(loss)init = tf.global_variables_initializer()sess = tf.Session()sess.run(init)print(0, sess.run(W).flatten(), sess.run(b).flatten())sess.run(train, {X: train_X, y: train_y})print(1, sess.run(W).flatten(), sess.run(b).flatten())sess.run(train, {X: train_X, y: train_y})print(2, sess.run(W).flatten(), sess.run(b).flatten())

運行結果截圖如下:

python - 使用TensorFlow創(chuàng)建邏輯回歸模型訓練結果為nan

可以看到,在迭代兩次之后,得到的W和b都變成了nan,請問是哪里的問題?

問題解答

回答1:

經過一番搜索,找到了問題所在。

在選取迭代方式的那一句:

optimizer = tf.train.GradientDescentOptimizer(0.1)

這里0.1的學習率過大,導致不知什么原因在損失函數(shù)中出現(xiàn)了log(0)的情況,結果導致了損失函數(shù)的值為nan,解決方法是減小學習率,比如降到1e-5或者1e-6就可以正常訓練了,我根據(jù)自己的情況把學習率調整為了1e-3,程序完美運行。

附上最終擬合結果:

python - 使用TensorFlow創(chuàng)建邏輯回歸模型訓練結果為nan

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 马龙县| 富宁县| 唐河县| 罗甸县| 秦安县| 乌苏市| 建始县| 保山市| 红安县| 乳源| 新野县| 德兴市| 新民市| 平舆县| 双城市| 仁化县| 乐陵市| 博野县| 定安县| 大田县| 蚌埠市| 若尔盖县| 遂宁市| 垦利县| 西乌| 锡林郭勒盟| 焦作市| 伊金霍洛旗| 女性| 营山县| 宁远县| 名山县| 平湖市| 郴州市| 出国| 永胜县| 砚山县| 德兴市| 宝清县| 甘孜县| 苍山县|