Repository navigation
Expand file tree
/
Copy pathSimplified_Stacked-RBM.py
More file actions
48 lines (39 loc) · 1.66 KB
/
Copy pathSimplified_Stacked-RBM.py
File metadata and controls
48 lines (39 loc) · 1.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import numpy as np
from keras.datasets import mnist
import matplotlib.pyplot as plt
# Restricted Boltzmann Machine (RBM) Class
class RBM:
def __init__(self, input_size, output_size):
self.weights = np.random.randn(input_size, output_size) * 0.01
self.h_bias = np.zeros(output_size)
self.v_bias = np.zeros(input_size)
def train(self, data, epochs, learning_rate):
# Placeholder for training method
pass
def sample_hidden(self, visible):
# Placeholder for sampling hidden layer
return np.random.randint(2, size=self.weights.shape[1])
def sample_visible(self, hidden):
# Placeholder for sampling visible layer
return np.random.randint(2, size=self.weights.shape[0])
# Stacked Restricted Boltzmann Machine Class
class StackedRBM:
def __init__(self, sizes):
self.rbms = [RBM(sizes[i], sizes[i + 1]) for i in range(len(sizes) - 1)]
def train(self, data, epochs, learning_rate):
input_data = data
for rbm in self.rbms:
rbm.train(input_data, epochs, learning_rate)
input_data = np.array([rbm.sample_hidden(sample) for sample in input_data])
# Load MNIST Data
(x_train, _), (_, _) = mnist.load_data()
x_train = x_train.astype('float32') / 255.0
x_train = x_train.reshape(-1, 784) # Flatten the images
# Initialize and Train Stacked RBM
sizes = [784, 512, 256] # Example layer sizes
stacked_rbm = StackedRBM(sizes)
stacked_rbm.train(x_train, epochs=10, learning_rate=0.01)
# Visualization (Optional)
# Visualize weights of the first RBM
plt.imshow(stacked_rbm.rbms[0].weights[:, :100], cmap='gray')
plt.show()