fork download
  1. # モジュールのインポート
  2. import math
  3. import sys
  4.  
  5. # グローバル変数
  6. INPUTNO = 2 # 入力数
  7. HIDDENNO = 2 # 中間層のセル数
  8. MAXINPUTNO = 100 # データの最大個数
  9.  
  10. # 下請け関数の定義
  11. # getdata()関数
  12. def getdata(e):
  13. """学習データの読み込み"""
  14. n_of_e = 0 # データセットの個数
  15. # データの入力
  16. for line in sys.stdin:
  17. e[n_of_e] = [float(num) for num in line.split()]
  18. n_of_e += 1
  19. return n_of_e
  20. # getdata()関数の終わり
  21.  
  22. # forward()関数
  23. def forward(wh, wo, hi, e):
  24. """順方向の計算"""
  25. # hiの計算
  26. for i in range(HIDDENNO):
  27. u = 0.0
  28. for j in range(INPUTNO):
  29. u += e[j] * wh[i][j]
  30. u -= wh[i][INPUTNO] # しきい値の処理
  31. hi[i] = f(u)
  32.  
  33. # 出力oの計算
  34. o = 0.0
  35. for i in range(HIDDENNO):
  36. o += hi[i] * wo[i]
  37. o -= wo[HIDDENNO] # しきい値の処理
  38. return f(o)
  39. # forward()関数の終わり
  40.  
  41. # f()関数
  42. def f(u):
  43. """伝達関数"""
  44. # ステップ関数の計算
  45. if u >= 0:
  46. return 1.0
  47. else:
  48. return 0.0
  49. # シグモイド関数の計算
  50. # return 1.0 / (1.0 + math.exp(-u))
  51. # f()関数の終わり
  52.  
  53. # メイン実行部
  54. wh = [[-2, 3, -1], [-2, 1, 0.5]] # 中間層の重み
  55. wo = [-60, 94, -1] # 出力層の重み
  56. e = [[0.0 for i in range(INPUTNO)]
  57. for j in range(MAXINPUTNO)] # データセット
  58. hi = [0 for i in range(HIDDENNO + 1)] # 中間層の出力
  59.  
  60. # 入力データの読み込み
  61. n_of_e = getdata(e)
  62. print("データの個数:", n_of_e)
  63.  
  64. # 計算の本体
  65. for i in range(n_of_e):
  66. print(i, ":", e[i], "->", forward(wh, wo, hi, e[i]))
  67. # nn.pyの終わり
Success #stdin #stdout 0.08s 14088KB
stdin
Standard input is empty
stdout
データの個数: 0