1. Keras Demo2

前节的Keras Demo代码:

import numpy as np
from keras.models import Sequential
from keras.layers.core import Dense,Dropout,Activation
from keras.optimizers import SGD,Adam
from keras.utils import np_utils
from keras.datasets import mnist def load_data():
(x_train,y_train),(x_test,y_test)=mnist.load_data()
number=10000
x_train=x_train[0:number]
y_train=y_train[0:number]
x_train=x_train.reshape(number,28*28)
x_test=x_test.reshape(x_test.shape[0],28*28)
x_train=x_train.astype('float32')
x_test=x_test.astype('float32')
y_train=np_utils.to_categorical(y_train,10)
y_test=np_utils.to_categorical(y_test,10)
x_train=x_train
x_test=x_test
x_train=x_train/255
x_test=x_test/255
return (x_train,y_train),(x_test,y_test) (x_train,y_train),(x_test,y_test)=load_data() model=Sequential()
model.add(Dense(input_dim=28*28,units=633,activation='sigmoid'))
model.add(Dense(units=633,activation='sigmoid'))
model.add(Dense(units=633,activation='sigmoid'))
model.add(Dense(units=10,activation='softmax')) model.compile(loss='mse',optimizer=SGD(lr=0.1),metrics=['accuracy']) model.fit(x_train,y_train,batch_size=100,epochs=20) result= model.evaluate(x_test,y_test) print('TEST ACC:',result[1])

Keras Demo中的结果不是很好,看一下在Training Data上的结果:

result= model.evaluate(x_test,y_test)
result2 = model.evaluate(x_train,y_train,batch_size=10000) print('TEST ACC:',result[1])
print('TRAIN ACC:',result2[1])

结果如下:

TEST ACC: 0.1135
TRAIN ACC: 0.1128000020980835

说明在Training Data上结果也不好,接下来开始调参:

loss function

分类问题mse不适合,将loss mse function 改为categorical_crossentropy

model.compile(loss='categorical_crossentropy',optimizer=SGD(lr=0.1),metrics=['accuracy'])

结果如下:

TEST ACC: 0.8488
TRAIN ACC: 0.8611000180244446

batch_size

batch_size从100改为10000,得到的结果不好。

model.fit(x_train,y_train,batch_size=10000,epochs=20)

结果如下:

TEST ACC: 0.101
TRAIN ACC: 0.10320000350475311

改为1,无法并行,速度变得很慢。

model.fit(x_train,y_train,batch_size=1,epochs=20)

deep layer

加10层,没有train起来。

for _ in range(10):
model.add(Dense(units=689,activation='sigmoid'))

结果如下:

TEST ACC: 0.101
TRAIN ACC: 0.10320000350475311

activation functon

把sigmoid都改为relu,发现现在train的accuracy就爬起来了,接近100%,在Test Data上也表现很好。

结果如下:

TEST ACC: 0.9556
TRAIN ACC: 0.9998000264167786

normalize

如果不进行normalize,把255去掉,得到的结果又不好了,这些细节也很重要。

# x_train=x_train/255
# x_test=x_test/255

结果如下:

TEST ACC: 0.098
TRAIN ACC: 0.10010000318288803

optimizer

把SGD(lr=0.1)改为Adam,然后再跑一次,用adam的时候最后收敛的地方差不多,但是上升的速度变快了。

结果如下:

TEST ACC: 0.9667
TRAIN ACC: 1.0

Random noise

加上noise之后,结果不好,overfitting了。

x_test=np.random.normal(x_test)

结果如下:

TEST ACC: 0.4986
TRAIN ACC: 0.9991000294685364

dropout

dropout 加在每个hidden layer之后,dropout加入之后,train的效果会变差,然而test的正确率提升了。

model.add(Dense(input_dim=28*28,units=689,activation='relu'))
model.add(Dropout(0.7))
model.add(Dense(units=689,activation='relu'))
model.add(Dropout(0.7))
model.add(Dense(units=689,activation='relu'))
model.add(Dropout(0.7))
model.add(Dense(units=10,activation='softmax'))

结果如下:

TEST ACC: 0.594
TRAIN ACC: 0.9894000291824341

2. FizzBuzz

题目描述:

给你100以内的数. 如果这个数被3整除,打印fizz.

如果这个数被5整除,打印buzz.

如果这个数能同时被3和5整除,打印fizz buzz.

FizzBuzz是一个很有意思的题目,如果用深度学习的方法来做的话,可以用如下代码实现。

数据准备:

对数字101到1000都做了数据标注,即训练数据xtrain.shape=(900,10),

每一个数字都是用二进位来表示,第一个数字是101,用二进位来表示即为[1,0,1,0,0,1,1,0,0,0],

每一位表示\(2^{n-1}\),\(n\)表示左数第几位。现在一共有四个case,[一般,Fizz,Buzz,Fizz Buzz],所以y_train.shape=(900,10),对应的维度用1表示,其他都为0。

from keras.layers.normalization import BatchNormalization
from keras.models import Sequential
from keras.layers.core import Dense,Dropout,Activation
from keras.optimizers import SGD,Adam
import numpy as np
def fizzbuzz(start, end):
x_train, y_train=[],[]
for i in range(start, end+1):
num = i
tmp = [0]*10
j = 0
while num:
tmp[j] = num & 1
num = num >> 1
j += 1
x_train.append(tmp)
if i % 3 == 0 and i % 5 == 0:
y_train.append([0,0,0,1])
elif i % 3 == 0:
y_train.append([0,1,0,0])
elif i % 5 == 0:
y_train.append([0,0,1,0])
else:
y_train.append([1,0,0,0])
return np.array(x_train), np.array(y_train)
x_train,y_train = fizzbuzz(101, 1000) #打标记函数
x_test,y_test = fizzbuzz(1, 100) model = Sequential()
model.add(Dense(input_dim=10, output_dim=100))
model.add(Activation('relu'))
model.add(Dense(output_dim=4))
model.add(Activation('softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(x_train, y_train, batch_size=20, nb_epoch=100) result = model.evaluate(x_test, y_test, batch_size=1000) print('Acc:',result[1])

最后的结果不是100%,所以我们将hidden neure从100改为1000,结果就是100%了。

model.add(Dense(input_dim=10, output_dim=1000))

【笔记】机器学习 - 李宏毅 - 11 - Keras Demo2 & Fizz Buzz的更多相关文章

  1. 【笔记】机器学习 - 李宏毅 - 9 - Keras Demo

    3.1 configuration 3.2 寻找最优网络参数 代码示例: # 1.Step 1 model = Sequential() model.add(Dense(input_dim=28*28 ...

  2. 李宏毅 Tensorflow解决Fizz Buzz问题

    提出问题 一个网友的博客,记录他在一次面试时,碰到面试官要求他在白板上用TensorFlow写一个简单的网络实现异或(XOR)功能.这个本身并不难,单层感知器不能解决异或问题是学习神经网络中的一个常识 ...

  3. [LeetCode] Fizz Buzz 嘶嘶嗡嗡

    Write a program that outputs the string representation of numbers from 1 to n. But for multiples of ...

  4. LeetCode 412. Fizz Buzz

    Problem: Write a program that outputs the string representation of numbers from 1 to n. But for mult ...

  5. LeetCode Fizz Buzz

    原题链接在这里:https://leetcode.com/problems/fizz-buzz/ 题目: Write a program that outputs the string represe ...

  6. [重构到模式-Chain of Responsibility Pattern]把Fizz Buzz招式重构到责任链模式

    写一段程序从1打印到100,但是遇到3的倍数时打印Fizz,遇到5的倍数时打印Buzz,遇到即是3的倍数同时也是5的倍数时打印FizzBuzz.例如: 1 2 Fizz 4 Buzz Fizz 7 8 ...

  7. [Swift]LeetCode412. Fizz Buzz

    Write a program that outputs the string representation of numbers from 1 to n. But for multiples of ...

  8. LeetCode算法题-Fizz Buzz(Java实现)

    这是悦乐书的第221次更新,第233篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第88题(顺位题号是412). 编写一个程序,输出从1到n的数字的字符串表示.但对于三的 ...

  9. 9. Fizz Buzz 问题

    Description Given number n. Print number from 1 to n. But: when number is divided by 3, print " ...

随机推荐

  1. Redis系列(三):Redis的持久化机制(RDB、AOF)

    本篇博客是Redis系列的第3篇,主要讲解下Redis的2种持久化机制:RDB和AOF. 本系列的前2篇可以点击以下链接查看: Redis系列(一):Redis简介及环境安装. Redis系列(二): ...

  2. 斐波那契数列(php实现)

    描述 斐波那契数列指的是这样一个数列:1.1.2.3.5.8.13.21.34... 规则 : 有N个数,第i个数的值 N(i)= N(i-1) + N(i-2) 需求: 给出下标i ,求第i 的个数 ...

  3. PTA 7-9 集合相似度(STL之set初体验)

    7-9 集合相似度(25 分) 给定两个整数集合,它们的相似度定义为:N​c​​/N​t​​×100%.其中N​c​​是两个集合都有的不相等整数的个数,N​t​​是两个集合一共有的不相等整数的个数.你 ...

  4. css中flex布局

    一.Flex布局是什么? Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为Flex布局. .box{ display: flex; ...

  5. Unity酱~ 卡通渲染技术分析(一)

    前面的话 unitychan是日本unity官方团队提供的一个Demo,里面有很好的卡通渲染效果,值得参考学习 上图是我整理出来的shader结构,可以看到Unity娘被拆分成了很多个小的部件,我想主 ...

  6. Python原来这么好学-2.1节: 选择PyCharm作为开发工具

    这是一本教同学们彻底学通Python的高质量学习教程,认真地学习每一章节的内容,每天只需学好一节,帮助你成为一名卓越的Python程序员: 本教程面向的是零编程基础的同学,非科班人士,以及有一定编程水 ...

  7. 你还用拼音为变量命名?新人OIer别傻了,教你写出优质代码

    本篇文章适用语言:python,c++,Java.(其实我就是随便bb) 我们在编辑代码的时候,不免拿其他人的代码进行学习,或者将自己的代码拿给别人修改.这个时候,如何让别人快速读懂你的代码,是提升效 ...

  8. 见异思迁:K8s 部署 Nginx Ingress Controller 之 kubernetes/ingress-nginx

    前天才发现,区区一个 nginx ingress controller 竟然2个不同的实现.一个叫 kubernetes/ingress-nginx ,是由 kubernetes 社区维护的,对应的容 ...

  9. zabbix的mysql优化后的配置文件

    zabbix的mysql数据库导致磁盘IO一直90%以上,访问卡的一逼 改了配置文件最后好了 [root@root /]# cat /etc/my.cnf [mysqld] datadir=/Data ...

  10. ubuntu16.04 自建源

    来自于https://www.cnblogs.com/liangqihui/p/7150066.html APT本地源的搭建(可用于局域网apt-get源搭建或者本地源) 本文档介绍使用apt-mir ...