TensorFlow和keras基础使用

在jupyter nootbook中编辑和运行

一 TensorFlow

步骤:

。import tensorflow as tf

二。载入数据

(数据分批)

三。定义placeholder(之后传入训练集)

x = tf.placeholder(tf.float32, [维度], name = "")

四。定义结构和参数(w,b)

写出预测函数z = (激活函数(wx + b))

扫描二维码关注公众号,回复: 10982001 查看本文章

可以进行dropout(防止过拟合)

第四步每一层神经网络都要定义一次(最后一层的激活函数一般和前面不一样)

w = tf.Variable(tf.zeros([]))

wx_plus_b = tf.matmul(w, x) + b

L1 = tf.nn.激活函数(wx_plus_b) (最后一层命名为prediction)

#dropout

keep_prob=tf.placeholder(tf.float32)(或直接定义为一个常数)

L1_drop = tf.nn.dropout(L1,keep_prob)

五。定义代价函数(二次代价函数,交叉熵代价函数)

loss = tf.reduce_mean(tf.square(y-prediction))(二次代价函数)(下面是交叉熵代价函数)

loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=prediction))

或tf.nn.sigmoid_cross_entropy_with_logits

prediction是预测函数(不带激活函数(softmax或sigmoid,一般最后一层都用这两个),因为这个函数里做了)

(tf.reduce_mean是求平均值)

六。优化器训练,定义学习率(随机梯度下降等很多)

train_step = tf.nn.GradientDescentOptimizer(0.5).minimize(loss)

tf.nn.AdadeltaOptimizer()

tf.nn.adagradOptimizer()

....很多种优化方法

七。求准确率

correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(prediction,1))

#argmax返回一维张量中最大的值所在的位置,tf.equal判断相等

accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))

八。初始化变量

init = tf.global_variabies_initializer()

。with tf.Session as sess:

sess.run(init)

for epoch in range(51):#训练51次

sess.run([] ,feed_dict = {x: , y: })

#[]里写要运行的OP,如train_step. 后面feed值。

这个函数可以有返回值,返回值为OP的执行结果。如果OP是一个元素就返回一个值;

若OP是一个list,则返回list的值,若OP是一个字典类型,则返回和OP同keys的字典。

acc = sess.run(accury, feed_dict = {})

print("Iter " + str(epoch) + ",Testing Accuracy " + str(acc))

可优化的地方

1.数据分批方式

2.训练数据多少

3.换激活函数

4.增加神经元和网络层数

5.加dropout(调整dropout的参数keep_prob)或正则化

6.学习率

7.换优化方式

8.训练次数增多

使用tensorBoard做网络可视化

1.每个部分(基本上按照前面的步骤分块)前面加命名空间,里面可以再加子空间

with tf.name_scope('自己定义空间名'):

with tf.name_scope(''):(placeholder和variable要加name参数,别的不用)

x = placeholder(tf.float32,[None,10],name = "x_input")

2.最后的with tf.Session() as sess:里面加:

writer = tf.summary.FileWriter('logs/(自己定义路径和文件夹)',sess.graph)

3.运行,打开命令提示符窗口cmd,输入d: (转到d盘)

tensorboard --logdir=路径,(路径就是刚才定义的logs文件夹位置,没定义路径自动在项目文件夹里面)

然后用谷歌浏览器(不要360)打开给的网址

改动程序后,要把文件删了,然后要选restart clearOutput。

绘图:

tf.summary.scalar("", w) 求a参数的标量图(变化图)

tf.summary.histogram("",w) 直方图

可以求loss和accuracy的标量图,w和b的标量图

最后加一句 合并所有的summary

merged = tf.summary.merge_all()

在with里面sess.run(train_step, feed_dict={x:batch_xs, y:batch_ys})这句话改成:

summary, _ = sess.run([merged, train_step],feed_dict={x:batch_xs, y:batch_ys})

writer.add_summary(summary)

二 Keras

model = Sequential()

#第一层(输入层)

model.add(Dense(input_dim = 28*28, output_dim = 500))

model.add(Activation('sigmoid'))

#第二层

model.add(Dense(output_dim = 500))

model.add(Activation('sigmoid'))

#第三层(输出层)

model.add(Dense(output_dim = 10))

model.add(Activation('softmax'))

#损失函数和优化器

model.compile(loss = 'mse',

optimizer = SGD(lr = 0.1),

metrics = ['accuracy'])

#训练

model.fit(x_train, y_train, batch_size = 100, nb_epoch = 20)

#测试

score = model.evaluate(x_text, y_text)

print('Total loss on Testing Set:', score[0])

print('Accuracy of Testing Set:', score[1])

#应用预测

result = model.predict(x_test)

发布了59 篇原创文章 · 获赞 46 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/sinat_41852207/article/details/105479320