七月在线TensorFlow

计算定义和执行计算分开:方便分布式计算

第一讲:

1.TensorFlow中如果一个运算,没有指定变量的名称,tensorboard中自动给它起个名字,例如x,y。

import tensorflow as tf
a = tf.add(3,5)
writer = tf.summary.FileWriter("/path/to/log",tf.get_default_graph())
writer.close()

2.

TensorBoard error : path /[[_dataImageSrc]] not found

这是因为进错了目录,进到了log里面,要进入log的父目录。和浏览器没有半毛钱关系啊。

3.

tf.multiply()元素相乘

tf.matrix()矩阵相乘

4.sess.run()中同时运行两个计算,直接搞个列表就可以了。

import tensorflow as tf
a = tf.constant([[2,2],[1,4]],name="a")
b = tf.constant([[0,1],[2,3]],name="b")
x = tf.multiply(a,b,name="dou_product")
y = tf.matmul(a,b,name="mat_mul")
with tf.Session() as sess:
    writer = tf.summary.FileWriter("E:/TensorFlow/Practice/chapter5/logg",sess.graph)
    c,d = sess.run([x,y])#sess.run()中同时运行两个运算
    print(c,d)
writer.close()

5.下面run出现多个选项

tensorboard --logdir=logg的父目录

6.变量初始化时初始一个列表

import tensorflow as tf
a = tf.Variable(tf.constant([[1,2],[3,4]]),name="a",)#tf.Variable()是一个类
b = tf.Variable(tf.constant([[5,6],[7,8]]),name="b")
with tf.Session() as sess:
    sess.run(tf.variables_initializer([a,b]))#初始化几个变量
    print(sess.run(tf.global_variables()))
    print(sess.run(tf.trainable_variables()))

7.tf.Variable()是一个类

创建一个变量,初始化之后,在会话中a.eval()得到变量的值。


第二讲

线性回归

使用一元一次函数进行预测

#coding=utf-8
#线性回归
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
# plt.rcParams["figure.figsize"] = (14,8)

#数据准备
#100个数据点
n = 100
xs = np.linspace(-3,3,n)#生成[-3:3]之间的n个数据,包括端点
ys = np.sin(xs)+np.random.uniform(-0.5,0.5,n)
plt.scatter(xs,ys)
plt.show()

#准备好placeholder
X = tf.placeholder(tf.float32,name="X")
Y = tf.placeholder(tf.float32,name="Y")

#初始化参数/权重
W = tf.Variable(tf.random_normal([1]),name="weights")


b = tf.Variable(tf.random_normal([1]),name="bias")

#计算预测结果
Y_pred = tf.add(tf.multiply(X,W),b)


#计算损失值
loss = tf.square(Y-Y_pred,name="losss")

#初始化optimizer
learning_rate = 0.01
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)

#执行
n_samples = xs.shape[0]
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    # writer = tf.summary.FileWriter("E:/TensorFlow/July/chapter2/log",sess.graph)

    for i in range(50):
        total_loss = 0
        for x,y in zip(xs,ys):
            _,l = sess.run([optimizer,loss],feed_dict={X:x,Y:y})#有两个结果,第一个不要,用_
            total_loss += l
        if i%5 == 0:
            print("Epoch{0}:{1}".format(i,total_loss/n_samples))
    writer = tf.summary.FileWriter("E:/TensorFlow/July/chapter2/log", sess.graph)
    writer.close()
    W,b = sess.run([W,b])
    print(W)
    print(b)
plt.plot(xs,ys,'bo',label="Real data")
plt.plot(xs,xs*W+b,'r',label="Predicted data")
plt.legend()
plt.show()

可以看出来拟合的效果很差。

多项式拟合

#coding=utf-8
#线性回归
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
#plt.rcParams["figure.figsize"] = (10,6)

#数据准备
#100个数据点
n = 100
xs = np.linspace(-3,3,n)#生成[-3:3]之间的n个数据,包括端点
xss = xs.reshape(1,100)
ys = np.sin(xs)+np.random.uniform(-0.5,0.5,n)
yss = ys.reshape(1,100)


#准备好placeholder
X = tf.placeholder(tf.float32,name="X",shape=[1,None])
Y = tf.placeholder(tf.float32,name="Y",shape=[1,None])

#初始化参数/权重
W = tf.Variable(tf.random_normal([1]),name="weights")
W_2 = tf.Variable(tf.random_normal([1]),name="weights2")
W_3 = tf.Variable(tf.random_normal([1]),name="weights3")

b = tf.Variable(tf.random_normal([1]),name="bias")

#计算预测结果
Y_pred = tf.multiply(X,W)+ b + tf.multiply(tf.pow(X,2),W_2)+ tf.multiply(tf.pow(X,3),W_3)


#计算损失值
loss = tf.reduce_mean(tf.pow(Y_pred-Y,2))

#初始化optimizer
learning_rate = 0.01
optimizer = tf.train.AdamOptimizer(learning_rate).minimize(loss)

#执行
n_samples = xs.shape[0]
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    # writer = tf.summary.FileWriter("E:/TensorFlow/July/chapter2/log",sess.graph)

    # for i in range(1000):
    #     total_loss = 0
    #     for x,y in zip(xs,ys):
    #         _,l = sess.run([optimizer,loss],feed_dict={X:x,Y:y})#有两个结果,第一个不要,用_
    #         total_loss += l
    #     if i%20 == 0:
    #         print("Epoch{0}:{1}".format(i,total_loss/n_samples))
    for i in range(1000):
        _, total_loss= sess.run([optimizer, loss], feed_dict={X: xss, Y: yss})  # 有两个结果,第一个不要,用_
        if i % 20 == 0:
            print("Epoch{0}:{1}".format(i, total_loss))
    writer = tf.summary.FileWriter("E:/TensorFlow/July/chapter2/log", sess.graph)
    writer.close()
    W,W_2,W_3,b = sess.run([W,W_2,W_3,b])
    print(W)
    print(W_2)
    print(W_3)
    print(b)
plt.figure(1)
plt.plot(xs,ys,'bo',label="Real data")
plt.plot(xs,np.power(xs,3)*W_3+np.power(xs,2)*W_2+xs*W+b,'r',label="Predicted data")
plt.legend()
plt.show()

可以看出来拟合效果很好。其实就是sin函数的泰勒展开。

有一个问题,在做的过程中发现,

optimizer = tf.train.AdamOptimizer(learning_rate).minimize(loss)
换成

optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
程序运行会出问题,不知道为什么。

逻辑回归

https://www.cnblogs.com/Belter/p/6128644.html

输出只有两个值,0,1。多个输出节点,解决分类问题,例如mnist分类。

第三讲

常用数据集

CIFAR-10

10类,50000张训练图片,10000张测试图片,32*32*3图像

官网http://www.cs.toronto.edu/~kriz/cifar.html

CIFAR-100

100类,50000张训练图片,10000张测试图片,32*32*3图像

官网http://www.cs.toronto.edu/~kriz/cifar.html

SVHN:

斯坦福大学,http://ufldl.stanford.edu/housenumbers/

10类,73257张训练图片,26032张测试图片,32*32*3


Caltech101:李飞飞构建

101类,~5050张图片,300*200*3

Imagenet:

1000类,1.4M图片,归一化为256*256*3

http://www.image-net.org

卷积层


注意:一个卷积核对彩色图像卷积后,得到的是一张图像,只有两个维度。比如原图32*32*3,卷积核5*5*3,得到的是28*28,不是28*28*3,这里相当于把彩色图像转化为黑白图像了。

每次做完卷积都要做非线性变换。

卷积时不应该先转置再求点积(内积)么?(正常卷积是要选旋转180度)

如果存在一个卷积核,它的值满足要求。因为对称的关系,一定存在另外一个卷积核,使得另外一个卷积核做转置后,再做内积,它的效果是一样的。所以就没有必要转置了。

输出图片大小

不使用0填充时候

使用0填充时

卷积层的步长一般为1,但是在有些模型中也会使用2,或者3作为步长

池化层

使用最多的是最大池化层,边长一般为2或者3,步长也一般为2或者3。

会丢失图像信息。得出结果也会更鲁棒一些。

经典神经网络架构



猜你喜欢

转载自blog.csdn.net/hhhhhyyyyy8/article/details/80342047