台大 李宏毅 机器学习 Keras Demo Fizz Buzz 十进制转二进制列表 python 代码

Keras Demo 2: 

课程视频链接: https://www.bilibili.com/video/av10590361/?p=19

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]    # x_train.shape=(10000, 28, 28)=x_test.shape
    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_test.shape[0]=number=10000
    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
    x_test=np.random.normal(x_test)
    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='relu'))
model.add(Dropout(0.7))
model.add(Dense(units=633,activation='relu'))
model.add(Dense(units=633,activation='relu'))
#for i in range(5):
#    model.add(Dense(units=633,activation='relu'))
model.add(Dense(units=10,activation='softmax'))

model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])

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

result1 = model.evaluate(x_train,y_train,batch_size=100)
print('\nTrain:Acc:', result1[1])

result2 = model.evaluate(x_test,y_test,batch_size=100)
print('\nTest:Acc:', result2[1])

 

Fizz Buzz: 

课程视频链接: https://www.bilibili.com/video/av10590361/?p=20

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):
        i1=i2=i
        tmp = [0]*10   
        j = -1
        while i1 != 0:
            tmp[j] = i1 % 2
            i1 = i1 >> 1
            j -= 1

#   此时tmp为i的二进制列表 如i为102时,tmp为[0,0,0,1,1,0,0,1,1,0]        

        tmp.reverse()   
        x_train.append(tmp)

#        num = i
#        tmp=[0]*10
#        j=0
#        while num :
#            tmp[j] = num & 1
#            num = num>>1
#            j+=1               此段为李宏毅老师的源代码
                 
        if i2 % 3 == 0 and i2 % 5 ==0:
            y_train.append([0,0,0,1])
        elif i2 % 3 == 0:
            y_train.append([0,1,0,0])
        elif i2 % 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(input_dim=10,units=1000,activation='relu'))
#model.add(Dense(output_dim=4))
#model.add(Activation('softmax'))
model.add(Dense(units=4,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])  

 

十进制转二进制、八进制、十六进制:

nb = int(input("输入数字:"))
print("十进制数为:", nb)
print("转换为二进制为:", int(bin(nb)[2:]))
print("转换为八进制为:", int(oct(nb)[2:]))
print("转换为十六进制为:", int(hex(nb)[2:]))

 

十进制转二进制列表:

def dec_to_binlist(nb, n):
    ls = [0 for i in range(n)]    
    i = -1
    while nb != 0:
        ls[i] = nb % 2
        nb = nb >> 1
        i -= 1
    return ls

 

Refer:

https://www.cnblogs.com/yanqiang/p/11400510.html

https://www.jb51.net/article/139206.htm

https://blog.csdn.net/weixin_41444522/article/details/92407926

你可能感兴趣的:(ML/DL)