예제 #1
0
 def __init__(self, total_images, nsets, job):
     self.total_images = total_images
     self.nsets = nsets
     if self.nsets == 1:
         self.train_all = self.total_images[:]
     else:
         self.parts = divide_int(len(self.total_images), self.nsets)
예제 #2
0
 def __init__(self, total_images, nsets, job):
     self.total_images = total_images
     if isinstance(nsets, int):
         self.nsets=nsets
     else if isinstance(nsets, list):
         if
     if self.nsets == 1:
         self.train_all=self.total_images[:]
     else:
         self.parts = divide_int(len(self.total_images), self.nsets)
예제 #3
0
 def __init__(self, total_images, nsets=None):
     self.total_images = total_images
     self.nsets = nsets
     ### in case nsets is defined
     if isinstance(nsets, int):
         if self.nsets == 1:
             self.train_all = self.total_images[:]
         else:
             ### defin self.parts
             self.parts = divide_int(len(self.total_images), self.nsets)
예제 #4
0
 def __init__(self, total_images, data_type, data_mining):
     self.total_images = total_images
     self.data_type = data_type
     self.data_mine = data_mining
     self.nsets = None
     self.parts = None
     if self.data_type == 'set':
         self.nsets = data_mining
         if self.nsets == 1:
             self.train_all = self.total_images[:]
         else:
             ### defin self.parts
             self.parts = divide_int(len(self.total_images), self.nsets)
예제 #5
0
 def get_val_train_images(self, n):
     parts = divide_int(len(self.total_images), self.nsets)
     print(parts, len(self.total_images))
     if n == 0:
         v_start = 0         # v for valence set area
         v_stop  = parts[0]
     else:
         v_start = parts[n-1]
         v_stop  = parts[n]
     val_images = self.total_images[v_start:v_stop]
     if n == 0:
         tra_images = self.total_images[v_stop:parts[-2]]
     else:
         tra_images = self.total_images[:v_start]
         if n != self.nsets-2:
             tra_images.extend(self.total_images[v_stop:parts[-2]])
     return tra_images, val_images
예제 #6
0
 def get_val_train_images(self, ndiv, n):
     #self.ndiv = ndiv
     parts = divide_int(len(self.total_images), ndiv)
     print(parts, len(self.total_images))
     if n == 0:
         v_start = 0
         v_stop  = parts[0]
     else:
         v_start = parts[n-1]
         v_stop  = parts[n]
     val_images = self.total_images[v_start:v_stop]
     if n == 0:
         tra_images = self.total_images[v_stop:parts[-2]]
     else:
         tra_images = self.total_images[:v_start]
         if n != ndiv-2:
             tra_images.extend(self.total_images[v_stop:parts[-2]])
     return tra_images, val_images
예제 #7
0
 def get_test_images(self, ndiv):
     self.ndiv = ndiv
     self.parts = divide_int(len(self.total_images), self.ndiv)
     print(self.parts, len(self.total_images))
     return self.total_images[self.parts[-2]:]
예제 #8
0
def amp_jobs(fdata, job, ndata, HL, E_conv):
    total_images = ase.io.read(fdata, index=':')
    if job == "train":
        if not ndata:
            #images = ase.io.read(fdata, index=':')
            images = total_images
            print("Start training using all the data %d" % len(total_images))
        else:
            #images = ase.io.read(fdata, index=':ndata')
            images = total_images[:ndata]
            print("number of traing data %d/%d" %
                  (len(images), len(total_images)))
        exe_train_images(images, HL, E_conv)

    elif job == "test":
        amp_pes = "amp.amp"

        ### get model and make title
        title = fdata.split(".")[0] + "\n"
        hl = '$\\times$'.join(str(x) for x in HL)
        suptitle = "\n\nAMP Model(HL={}".format(hl) + ", "
        suptitle += "E_rms={}):".format(E_conv) + " "
        suptitle += "test/train={}/{}".format(len(total_images) - ndata, ndata)

        exe_test_images(total_images[ndata:], amp_pes, title, suptitle)

    elif job == "valid-test":
        print("validation test")
        if not ndata:
            ndata = 5
        parts = divide_int(len(total_images), ndata)
        print(parts, "in total {}".format(len(total_images)))
        for i in range(ndata - 1):
            img_train, img_valid = divide_train_valid_images(
                total_images[0:parts[-1]], parts, i)

            exe_train_images(img_train, HL, E_conv)
            amp_pes = "amp.amp"
            ### get model and make title
            title = fdata.split(".")[0] + "\n"
            hl = '$\\times$'.join(str(x) for x in HL)
            suptitle = "AMP Model(HL={}".format(hl) + ", "
            suptitle += "E_rms={}):".format(E_conv) + " "
            suptitle += "train:validation:test=1:1:1\n"
            exe_test_images(total_images[ndata:], amp_pes, title, suptitle)

            # check divided image sets: plot 2d here
            if False:
                x_draw = []
                y_draw = []
                for n, atoms in enumerate(img_train):
                    pot = atoms.get_potential_energy()
                    x_draw.append(n)
                    y_draw.append(pot)
                mplot_vector_two(x_draw,
                                 y_draw,
                                 Title="Extracted Training Set %d" % i,
                                 Xtitle="serial number",
                                 Ytitle="Epot")

    elif job == 'md':
        if not ndata:
            atoms = ase.io.read(fdata, index='0')
        else:
            atoms = ase.io.read(fdata, index=ndata)
        run_md(atoms)
    return