Пример #1
0
# Model name
model_name = '64_oscis_optim'
save_name = os.path.join(save_dir, model_name)

# Side of image
img_side = 10
# Polyomino type
n = 3
# Number of polyominoes
num_polys = 2
# Batch Size
batch_size = 64

# Data generator
generator = polyomino_scenes(n, img_side, num_polys, batch_size)

# Model parameters
learning_rate = 1e-2
training_steps = 5000

# Dynamics duration
episodes = 100
update_rate = .1
anneal = False

# Loss is sum of frame potential and within-group synchrony
loss_func = loss_func_ex.matt_loss_torch

# How frequently to report results
plot_when = 5
Пример #2
0
from make_data_new import polyomino_scenes
import numpy as np
import net
import matplotlib.pyplot as plt

saved = True
while saved:
    generator = polyomino_scenes(n=3,
                                 num_objects=2,
                                 img_side=8,
                                 batch_size=1,
                                 rotation=True)
    train_data = generator.generate_batch()
    train_img = net.convert2twod(train_data[0])
    train_mask = net.mask_pro(train_data[1][0])
    if np.min(np.sum(train_mask, axis=2), axis=1) != 0:
        np.savez('/media/data_cifs/yuwei/osci_save/data/train_data328.npz',
                 image=train_data[0],
                 mask=train_mask)
        plt.imshow(train_data[0][0])
        plt.savefig('/media/data_cifs/yuwei/osci_save/data/train_data328.png')
        saved = False
Пример #3
0
    def __init__(self,
                 n=1,
                 num=2,
                 lr=1e-2,
                 report=25,
                 batch_size=16,
                 train_step=100,
                 evolution_step=20,
                 img_side=2):

        # omino type
        self.n = n
        # number of objects
        self.num = num
        # learning rate
        self.lr = lr
        # report steps
        self.report = report
        # batch size
        self.batch = batch_size
        # image size
        self.img_side = img_side
        # save dir
        self.fig_dir = os.path.join(os.path.expanduser('~'), 'oscillators')
        # model dir
        self.data_dir = os.path.join(os.path.expanduser('~'), 'osc_models')
        # Min and max number of groups
        self.min_groups = 2
        self.max_groups = self.num

        for dr in [self.fig_dir, self.data_dir]:
            if not os.path.exists(dr):
                os.makedirs(dr)

        # initialize a generator
        if self.img_side > 2:
            self.generator = polyomino_scenes(self.n, self.img_side, self.num,
                                              self.batch, True)
            self.types = len(self.generator.n_ominoes)
        else:
            self.types = 2

        # training steps
        self.steps = train_step

        # iterate steps
        self.episodes = evolution_step

        # start to build the graph

        # initialize a network
        #self.network = small_net(5,16)
        self.network = big_net(img_side, 3, 5, num_features=16)
        self.network.apply(weights_init)
        self.optimizer = torch.optim.Adam(self.network.parameters(),
                                          lr=self.lr)

        # if you want to see which param is gonna require grads print it with its value
        # by uncommenting following
        """
        for name, param in self.network.named_parameters():
            if param.requires_grad:
                print(name, param.data)
                """

        # save map generated
        self.couplings = []
        # one test image could be used
        if self.img_side > 2:
            test_batch, test_mask = generate_test_img(n=self.n,
                                                      img_side=self.img_side,
                                                      num=self.num)
            #self.test_img = self.convert2oned(test_data[0], test=True)
            self.test_batch = torch.tensor(test_batch).unsqueeze(1).float()
            self.test_mask = torch.tensor(list(map(self._mask_pro,
                                                   test_mask))).float()
        else:
            self.test_img = np.reshape(np.concatenate(
                [np.zeros((1, 2)), np.ones((1, 2))], axis=0),
                                       newshape=[1, 2, 2, 1])
            self.test_img = self.convert2oned(self.test_img, test=True)

            self.test_mask = np.reshape(
                np.concatenate(
                    [np.array([[1, 1, 0, 0]]),
                     np.array([[0, 0, 1, 1]])]), [1, 2, 4])
            self.test_mask = torch.tensor(self.test_mask).float()

        self.loss_history = []
Пример #4
0
model_name = '64_oscis_optim'
save_name = os.path.join(save_dir, model_name)

# Side of image
img_side = 16
# Polyomino type
n = 4
# Number of polyominoes
num_polys = 2
# Batch Size
batch_size = 64

# Data generator
generator = polyomino_scenes(n,
                             img_side,
                             num_polys,
                             batch_size,
                             rotation=False,
                             noisy=False)

# Model parameters
learning_rate = 1e-3
training_steps = 5000
init_steps = 1600
kernel_size = 5
num_conv_features = 32
out_kernel_side = None

# Dynamics duration
episodes = 100
update_rate = 1.0
anneal = False
Пример #5
0
save_name = os.path.join(save_dir, model_name)
img_side = 16
learning_rate = 1e-4
training_steps = 5000
episodes = 100
loss_func1 = loss_func_ex.coh_btw_groups_torch
loss_func2 = loss_func_ex.coh_in_groups_torch
loss_func3 = loss_func_ex.exinp_btw_groups_torch
loss_func4 = loss_func_ex.fpt_btw_groups_torch
report = 100
effect = 2
batch_size = 32
#train_data = np.load('train_data.npz')
#train_img = train_data['image']
#train_mask = torch.tensor(train_data['mask']).float()
generator = polyomino_scenes(5, img_side, 4, batch_size)

#network = net.net2() # architecture
network = nets.big_net(img_side, 3)
#network.apply(net.weights_init) # network initialization
display = kv.displayer()  # visualization
osci = km.kura_torch(img_side**2)
loss_history = []

train_op = torch.optim.Adam(network.parameters(), lr=learning_rate)

for step in range(training_steps):
    train_op.zero_grad()

    batch, sd = generator.generate_batch()
    batch = torch.tensor(batch).unsqueeze(1).float()