tensorflow フィボナッチ数

tennsorflowのDNNRegressorを使って、一つ前の数字から次の数字を推定させてみました。
XとYの数列を変更すれば、結構色々な数列を推定します。

結果を10回目と10000回目の学習で出力すると、精度の違いがよく分かります。

import numpy as np
import pandas as pd
import tensor flow as tf

#フィボナッチ数列を12番目まで与えてみる
X=pd.DataFrame({'x1':[1,2,3,4,5,6,7,8,9,10,11,12]})
Y=pd.DataFrame({'y':[1,1,2,3,5,8,13,21,34,55,89,144]})
test_ar=[17,18,19]
ans_ar=[987,1597,2584]

#パラメータはこれだけ
steps=1000
n_epochs=10000
h_n=[100,100]

c=tf.feature_column.numeric_column('x1',shape=(1))

my_input_fn = tf.estimator.inputs.pandas_input_fn(
        x=X,
        y=Y,
        num_epochs=n_epochs,
        shuffle=False
        )

test_input_fn = tf.estimator.inputs.pandas_input_fn(
        x=pd.DataFrame({'x1':test_ar}),
        y=None,
        num_epochs=1,
        shuffle=False
        )

estimator = tf.estimator.DNNRegressor(
        feature_columns=[c],
        hidden_units=h_n
        )

for i in range(9):
    estimator.train(input_fn=my_input_fn,steps=i+1)
    train_metrics=estimator.evaluate(input_fn=my_input_fn,steps=i+1)
    print(i+1,'回学習しました。 平均誤差は',train_metrics['average_loss'],'です。')

estimator.train(input_fn=my_input_fn,steps=10)
train_metrics=estimator.evaluate(input_fn=my_input_fn,steps=10)
test_metrics=estimator.predict(input_fn=test_input_fn)
ar=[]
for p,q in enumerate(test_metrics):
    ar.append(q['predictions'].round(decimals=1).item(0))
result=pd.DataFrame({'正解':ans_ar,'推定':ar})
print('--------------------------------------------------')
print('10回学習しました。平均誤差は',train_metrics['average_loss'],'です。')
print('【推定結果】')
print(result)
print('--------------------------------------------------')
print('--------------------------------------------------')

estimator.train(input_fn=my_input_fn,steps=steps)
train_metrics=estimator.evaluate(input_fn=my_input_fn,steps=steps)
test_metrics=estimator.predict(input_fn=test_input_fn)
ar=[]
for p,q in enumerate(test_metrics):
    ar.append(q['predictions'].round(decimals=1).item(0))

result=pd.DataFrame({'正解':ans_ar,'推定':ar})
print(steps,'回学習しました。平均誤差は',train_metrics['average_loss'],'です。')
print('【推定結果】')
print(result)
print('--------------------------------------------------')