tensorflow中相同的代码,运行多次每次的结果都不相同? 40C

本人渣渣一枚,最近在tensorflow中遇到以下问题:
先上一下代码,
图片说明

图片1,加载文件中的参数,并将其值赋给常量(避免后期值被改变,渣渣只会这种操作,哭)
图片说明

图片2,加载训练数据集

图片说明

图片3,也就是有问题的地方。
具体问题如下:当我执行完图片3的代码后,再执行一次,结果就和第一次不一样,必须要在执行图片3之前再执行一次图片1才能使结果一致,见下图:
图片说明

图片说明
求指导,感谢!!!!!

附上全部代码:

coding: utf-8

In[1]:

import tensorflow as tf
import matplotlib.pyplot as plt

In[2]:

import Ipynb_importer

In[3]:

from core3 import *

In[5]:

with tf.Session() as sess:
ww,bb=load_weights('e:/python/savedata/','keep4',3)
w00=ww[0]
w01=ww[1]
w02=ww[2]
w03=ww[3]

b00=bb[0]
b01=bb[1]
b02=bb[2]
b03=bb[3]
sess.run(tf.global_variables_initializer())
w10=w00.eval()
w11=w01.eval()
w12=w02.eval()
w13=w03.eval()
b10=b00.eval()
b11=b01.eval()
b12=b02.eval()
b13=b03.eval()

w0=tf.constant(w10)
w1=tf.constant(w11)
w2=tf.constant(w12)
w3=tf.constant(w13)
b0=tf.constant(b10)
b1=tf.constant(b11)
b2=tf.constant(b12)
b3=tf.constant(b13)

In[8]:

X_train, y_train, X_test, y_test, train_x_mean, train_x_std,train_y_mean0,train_y_std=get_data('e:/Python/jupyter/fuxian/data/2_layer_tio2',percentTest=.2,random_state=42)
print(y_train)
print(X_train)

In[ ]:

with tf.Session() as sess:

x0=tf.convert_to_tensor(X_train)
x1=tf.cast(x0,tf.float32)
a1 = tf.sigmoid(tf.add(tf.matmul(x1, w0),b0))
b1 = tf.sigmoid(tf.add(tf.matmul(a1, w1),b1))
c1 = tf.sigmoid(tf.add(tf.matmul(b1, w2),b2))
y1p = tf.add(tf.matmul(c1, w3),b3)
y1=y1p.eval()
m=tf.reduce_mean(np.abs((y1-y_train)/y_train))*100
print(sess.run(m))

补充:

图片说明

之后又尝试通过上图的代码一步一步找问题,在第一次执行和第二次执行的结果中,a1的值相同,b1的值不相同,但w0,w1的值是相同的,这又是为什么?求指导!!感谢!!

2个回答

global_variables_initializer() 这个会将权重设置成随机值,你后面又没有再训练,所以结果就是随机的了。

lilililizhan
lilililizhan 权值的值我打开文档进行了对比,并没有变成随机数
一年多之前 回复
lilililizhan
lilililizhan 我后面通过print(sess.run(w0))的操作,权值并没有发生变化
一年多之前 回复

代码目前看不出问题,建议补全信息以便复现分析

CALch
LovePatricia 问题很简单,b1 = tf.sigmoid(tf.add(tf.matmul(a1, w1),b1)) 这一句对b1进行了重新赋值,第二次计算b1的时候值变了。把这里左边的b1换一个名字即可,同时替换后文中对应的变量
一年多之前 回复
lilililizhan
lilililizhan 除了这三段代码,就是一些import的代码了
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐