fizzbuzz的機器學習解法

2021-07-12 05:29:15 字數 2699 閱讀 8641

**

fizzbuzz是面試的常見問題,內容為:輸出0到100的數字,但是3的倍數輸出fizz,5的倍數輸出buzz,同時是3和5的倍數的輸出fizzbuzz。

通過訓練乙個分類器將結果分為4classes:

all in all,網路輸入需要為二進位制,我們需要將9表示為[1,0,0,1],我們取輸入神經元為10個,達到1024的訓練資料,避免作弊嫌疑.

def

binary_encode

(i, num_digits):

return np.array([i >> d & 1

for d in range(num_digits)])

輸出用四個神經元one-hot來表示即可:

if   i % 15 == 0: return np.array([0, 0, 0, 1])

elif i % 5 == 0: return np.array([0, 0, 1, 0])

elif i % 3 == 0: return np.array([0, 1, 0, 0])

else: return np.array([1, 0, 0, 0])

這個時候,輸入輸出已經做好,取101至1024作為訓練集

num_digits = 10

trx = np.array([binary_encode(i, num_digits) for i in

range(101, 2 ** num_digits)])

try = np.array([fizz_buzz_encode(i) for i in

range(101, 2 ** num_digits)])

定義輸入引數(tensorflow)

num_hidden = 100

x = tf.placeholder("float", [none, num_digits])

y = tf.placeholder("float", [none, 4])

definit_weights

(shape):

return tf.variable(tf.random_normal(shape, stddev=0.01))

#初始化

w_h = init_weights([num_digits, num_hidden])

#隱含層輸出

defmodel

(x, w_h, w_o):

h = tf.nn.relu(tf.matmul(x, w_h))

return tf.matmul(h, w_o)

用交叉熵定義損失函式

py_x = model(x, w_h, w_o)

cost = tf.reduce_mean(tf.nn

.softmax_cross_entropy_with_logits(py_x, y))

train_op = tf.train

.gradientdescentoptimizer(0.05).minimize(cost)

#定義網路輸出

predict_op = tf.argmax(py_x, 1)

deffizz_buzz

(i, prediction):

return [str(i), "fizz", "buzz", "fizzbuzz"][prediction]

下面用sdg訓練

batch_size = 128

# launch the graph in a session

with tf.session() as sess:

tf.initialize_all_variables().run()

for epoch in range(10000):

# shuffle the data before each training iteration.

p = np.random

.permutation(range(len(trx)))

trx, try = trx[p], try[p]

# train in batches of 128 inputs.

for start in range(0, len(trx), batch_size):

end = start + batch_size

sess.run(train_op, feed_dict=)

# and print the current accuracy on the training data.

print(epoch, np.mean(np.argmax(try, axis=1) ==

sess.run(predict_op, feed_dict=)))

# and now for some fizz buzz

numbers = np.arange(1, 101)

tex = np.transpose(binary_encode(numbers, num_digits))

tey = sess.run(predict_op, feed_dict=)

output = np.vectorize(fizz_buzz)(numbers, tey)

print(output)

可以執行了

機器學習 1 機器學習的入門

最近由於專案要求,從零開始自學機器學習,使用語言是python2.7。機器學習分類 監督學習,無監督學習,強化學習 監督學習 對事物未知表現的 包括分類問題和回歸問題。1 分類 指給乙個新的模式,根據訓練模型推斷它所對應的類別是多少,是一種定性輸出,也叫離散變數 2 回歸 指給乙個新的模式,根據訓練...

機器學習(1) 機器學習的分類

第二種分類方式 本文是imooc python3入門機器學習 的學習筆記,用於整理自己學習到的概念,用以備查。簡單說來,就是對於學習對於所要求的資料集,是否需要標註。常見的監督學習演算法有 常見的 非監督演算法及其用處見下 出於各種原因,資料集可能出現一部分資料集帶有標記,而另一部分則缺失標記。此時...

機器學習 初識機器學習

1.什麼是機器學習?對於機器學習到現在都還沒有統一的定義,但是,通過乙個例子和較權威的定義來理解機器學習,最後附上我個人對機器學習的理解 2.監督學習 1 監督學習基本思想 我們資料集中的每個樣本都有相應的 正確答案 即每個樣本都是真實值,再根據這些樣本作出 舉乙個房價預售的例子來說明 eg 下面圖...