Class: TLearn::HopFieldNet

Inherits:
Object
  • Object
show all
Defined in:
lib/t_learn/hop_field_net.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(threshold = nil, data) ⇒ HopFieldNet

Returns a new instance of HopFieldNet.



9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/t_learn/hop_field_net.rb', line 9

def initialize(threshold=nil, data)
  if threshold == nil
    @threshold = 0.0
  else
    @threshold = threshold
  end
  @train_datas=Array.new 
  load_train_data(data)
  @nodes = Array.new(@train_datas[0].length, 1.0)
  @dim = @train_datas[0].length
  @net = Array.new(@dim**2,0.0) 

end

Instance Attribute Details

#dimObject

Returns the value of attribute dim.



7
8
9
# File 'lib/t_learn/hop_field_net.rb', line 7

def dim
  @dim
end

#is_trainObject

Returns the value of attribute is_train.



7
8
9
# File 'lib/t_learn/hop_field_net.rb', line 7

def is_train
  @is_train
end

#netObject

Returns the value of attribute net.



7
8
9
# File 'lib/t_learn/hop_field_net.rb', line 7

def net
  @net
end

#nodesObject

Returns the value of attribute nodes.



7
8
9
# File 'lib/t_learn/hop_field_net.rb', line 7

def nodes
  @nodes
end

#thresholdObject

Returns the value of attribute threshold.



7
8
9
# File 'lib/t_learn/hop_field_net.rb', line 7

def threshold
  @threshold
end

#train_datasObject

Returns the value of attribute train_datas.



7
8
9
# File 'lib/t_learn/hop_field_net.rb', line 7

def train_datas
  @train_datas
end

Instance Method Details

#calc_connected_factor(target_node_id) ⇒ Object



56
57
58
59
60
61
62
# File 'lib/t_learn/hop_field_net.rb', line 56

def calc_connected_factor(target_node_id)
  sum = 0.0
  @nodes.each_with_index do |node,node_id|
    sum += @net[target_node_id*@dim + node_id] * node if (target_node_id != node_id )
  end
  return sum
end

#energyObject

calc energy function



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/t_learn/hop_field_net.rb', line 75

def energy
  sum = 0.0
  @nodes.each_with_index do |node,node_id|
    @nodes.each_with_index do |node2,node2_id|
      sum += @net[node2_id*@dim + node_id] * node * node2 if ( node != node2)
    end
  end
  sum2 = 0.0 
  @nodes.each do |node|
    sum2 += @threshold * node 
  end

  result = (-1.0/2.0)*sum + sum2
  return result
end

#load_train_data(data) ⇒ Object



92
93
94
# File 'lib/t_learn/hop_field_net.rb', line 92

def load_train_data(data)
  @train_datas.push(data)
end

#memorizeObject



23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/t_learn/hop_field_net.rb', line 23

def memorize
  @nodes.length.times do |node_id|
    @nodes.length.times do |node2_id|
      sum = 0.0 
      @train_datas.each do |train_data|
        sum += train_data[node_id] * train_data[node2_id] if(node_id != node2_id)
      end
      @net[node_id * @dim + node2_id] = sum
      @net[node2_id*@dim + node_id] = sum
    end
  end
end

#remember(datas) ⇒ Object

Parameters:

  • datas (Array)

    datas which has noise



41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/t_learn/hop_field_net.rb', line 41

def remember(datas)
  @nodes = datas
  e = energy
  loop do
    @nodes.each_with_index do |node,node_id|
      internal_w = calc_connected_factor(node_id) 
      update_external_w(node_id,internal_w)
    end
    new_e = energy
    break if (e == new_e)
    e = new_e
  end
  puts "energy : #{energy}"
end

#update_external_w(node_id, i_w) ⇒ Object



64
65
66
67
68
69
70
# File 'lib/t_learn/hop_field_net.rb', line 64

def update_external_w(node_id,i_w)
  if i_w >= @threshold
    @nodes[node_id] = 1.0
  else
    @nodes[node_id] = -1.0
  end
end