tensorflow解决Fizz Buzz 的问题

问题是:

一个网友的博客,记录他在一次面试时,碰到面试官要求他在白板上用TensorFlow写一个简单的网络实现异或(XOR)功能。这个本身并不难,单层感知器不能解决异或问题是学习神经网络中的一个常识,而简单的两层神经网络却能将其轻易解决。但这个问题的难处在于,我们接触TensorFlow通常直接拿来写CNN,或者其他的深度学习相关的网络了,而实现这种简单网络,基本上从未做过;更何况,要求在白板上写出来,如果想bug free,并不是容易的事儿啊。

 1 from keras.layers.normalization import BatchNormalization
 2 from keras.models import Sequential
 3 from keras.utils import np_utils
 4 from keras.layers.core import Dense, Dropout, Activation
 5 from keras.optimizers import SGD, Adam
 6 import numpy as np
 7 
 8 def fizzbuzz(start,end):
 9     x_train, y_train = [], []
10     for i in range(start, end+1):
11         num = i
12         tmp = [0]*10
13         j = 0
14         while num:
15             tmp[j] = num & 1
16             num = num >> 1
17             j += 1
18         x_train.append(tmp)
19         if i % 3 == 0 and i % 5 ==0:
20             y_train.append([0, 0, 0, 1])
21         elif i % 3 == 0:
22             y_train.append([0, 1, 0, 0])
23         elif i % 5 == 0:
24             y_train.append([0, 0, 1, 0])
25         else :
26             y_train.append([1, 0, 0, 0])
27     return np.array(x_train), np.array(y_train)
28 
29 
30 x_train, y_train = fizzbuzz(101, 1000) 
31 x_test, y_test = fizzbuzz(1, 100)
32 
33 model = Sequential()
34 model.add(Dense(input_dim=10, output_dim=1000))
35 model.add(Activation('relu'))
36 model.add(Dense(output_dim=4))
37 model.add(Activation('softmax'))
38 
39 model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
40 
41 model.fit(x_train, y_train, batch_size=20, nb_epoch=100)
42 
43 result = model.evaluate(x_test, y_test, batch_size=1000)
44 
45 print('Acc:', format(result[1],  '0.2f'))

参数不同结果不同

 

 

 

 参考博客:https://www.cnblogs.com/baobaotql/p/11516611.html

posted @ 2020-02-21 17:44  cfancy  阅读(247)  评论(0编辑  收藏  举报