(1)python库基础了解之tensorflow

环境:Ubuntu 16.04.1 +cuda 9.0 + cudnn 7+tensorflow-gpu 1.6.0 +python 3.5.2

1.Session
tf.Session()
import tensorflow as tf 

m1=tf.constant([[3,3]])
m2=tf.constant([[2],
                [2]])
product=tf.matmul(m1,m2)# 相当于np.dot(m1,ma2)
#method 1
sess=tf.Session()
result=sess.run(product)
print(result)
sess.close()

#method 2
#在 with ...as 当中会自动执行sess.close()
with tf.Session() as sess1: 
    result2=sess.run(product)
    print(result2)

2 Variable()
import tensorflow as tf 
#tensorflow 当中一定要定义成变量,才会是变量,如同定义一个常量
state=tf.Variable(0,name='counter')#给定初始值和名字
#print(state.name)
one=tf.constant(1)
new_value=tf.add(state,one)
update=tf.assign(state,new_value)

#tensorflow当中必须执行这一句,才能激活所有变量
init=tf.initialize_all_variables()
with tf.Session() as sess:
    sess.run(init)
    for _ in range(3):
        sess.run(update)
        print(sess.run(state))
3.placeholder()
import tensorflow as tf 
input1=tf.placeholder(tf.float32)#tensorflow 大部分情况处理的type 为float32
input2=tf.placeholder(tf.float32)

output=tf.multiply(input1,input2)

with tf.Session() as sess:
    print(sess.run(output,feed_dict={input1:[7.],input2:[2.]}))#每次执行session时,再喂入值,值的形式是字典
4 建立一个简单的三层神经网络
import tensorflow as tf 
import numpy as np 
def add_layer(inputs,in_size,out_size,activation_funcion=None):
    Weights=tf.Variable(tf.random_normal([in_size,out_size]))#定义权重,生成随机变量比全部为0更好
    biases=tf.Variable(tf.zeros([1,out_size])+0.1)#最好不要全为0,故多加0.1
    Wx_plus_b=tf.matmul(inputs,Weights)+biases
    if activation_funcion is None:
        outputs=Wx_plus_b
    else:
        outputs=activation_funcion(Wx_plus_b)
    return outputs
#自己构造输入
x_data=np.linspace(-1,1,300)[:,np.newaxis]
#增加噪音,使得数据更加真实,而不是完全契合二次曲线
noise=np.random.normal(0,0.05,x_data.shape)
y_data=np.square(x_data)-0.5+noise

xs=tf.placeholder(tf.float32,[None,1])#无论给多少sample 都可行
ys=tf.placeholder(tf.float32,[None,1])
#建立简单的三层神经网络(输入层:1;隐藏层:10;输出层:1)
L1=add_layer(xs,1,10,activation_funcion=tf.nn.relu)
prediction=add_layer(L1,10,1,activation_funcion=None)

loss=tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction),
                    reduction_indices=[1]))
#学习                  
train_step=tf.train.GradientDescentOptimizer(0.1).minimize(loss)#以0.1的学习率进行优化误差

init=tf.initialize_all_variables()
sess=tf.Session()
#只有运行到sess.run(),上面的代码才开始执行
sess.run(init)

for i in range(1000):
    sess.run(train_step,feed_dict={xs:x_data,ys:y_data})#假设使用全部数据来进行运算
    if i % 50==0:#每50次,显示loss值,观测loss值是否逐渐减小
        print(sess.run(loss,feed_dict={xs:x_data,ys:y_data}))
     

5. 可视化结果
fig=plt.figure() #生成图片框
ax=fig.add_subplot(1,1,1)
ax.scatter(x_data,y_data)
#连续plot,不暂停
plt.ion()
fig.savefig('save_img.jpg', facecolor='grey', edgecolor='red')
plt.show()

for i in range(1000):
    sess.run(train_step,feed_dict={xs:x_data,ys:y_data})#假设使用全部数据来进行运算
    if i % 50==0:
        print(sess.run(loss,feed_dict={xs:x_data,ys:y_data}))
        try: #第一次会报错,因为没有。但可以忽略。这种方法可以紧密衔接
            ax.lines.remove(lines[0])
            
        except Exception:
            pass
        prediction_value=sess.run(prediction,feed_dict={xs:x_data})
        lines=ax.plot(x_data,prediction_value,'r-',lw=5) 
        #显示一条线后,要抹除该条线,才能更好的显示下一条
        fig.savefig('img.jpg', facecolor='grey', edgecolor='red')
        plt.pause(0.1)
        
6

发布了17 篇原创文章 · 获赞 5 · 访问量 5157

猜你喜欢

转载自blog.csdn.net/Emily_Buffy/article/details/105168632