Я новое глубокое обучение. Может кто-нибудь посоветовать мне, как избежать цикла do для многократного вызова процедур подгонки тензорного потока?
Пытаясь сгенерировать некоторые динамические аппроксимации, я обнаружил, что пишу цикл do, каждый шаг которого создает отдельную модель.
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
from scipy.stats import logistic
from numpy.random import choice
from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten, Conv2D
### simulated data for repeated learning
n = 4
p = 5
for idat in range(n):
beta = np.random.uniform(-1,1,p+1).reshape(( p+1,1))
ndat = 10+ np.random.random_integers(10)
tidat = np.array([np.random.uniform(0,1,1),]ndat) s = np.random.uniform(0,1,ndatp).reshape((ndat, p))
x = np.append(tidat, s, axis=1) ### data
phat = logistic.cdf(x.dot(beta))
y = np.random.binomial(1, p=phat) ### label
if (idat==0):
dat = np.append(y,x, axis=1)
if (idat>0):
dat = np.vstack((dat,np.append(y,x, axis=1) ))
### function for each deep learning training
def hazard(outy,outx):
numclasses = 2 ###build the model
dlos = Sequential()
dlos.add(Flatten())
dlos.add(Dense(10, activation='relu'))
dlos.add(Dense(numclasses,
activation='softmax'))
dlos.compile(loss=keras.losses.categoricalcrossentropy, optimizer='adam',
metrics=['accuracy']) ### fitting the intermediate data dlos.fit(outx,
out_y,epochs=20)
return dlos
tp = np.unique(dat[:,1:2]) ### number of different time points
for i in range(len(tp)): ### how do we avoid or vectorize this do loop?
imgrows, imgcols = 1, 6
numclasses = 2
tnow=tp[i]
tdat=dat[np.where(dat[:,1] == tnow)]
y = tdat[:, ] out
y = keras.utils.tocategorical(y, numclasses)
x = tdat[:,1:]
numimages = tdat.shape[0]
outx = x.reshape(numimages, imgrows, imgcols, 1)
model=hazard(outy,out_x)
model.save('DLOS'+format(i)+'.h5')
### simulate test data
p = 5
ndat = 3
tidat = np.array([np.random.uniform(0,1,1),]ndat) s = np.random.uniform(0,1,ndatp).reshape((ndat, p))
x = np.append(tidat, s, axis=1) ### data
import tensorflow as tf
import keras
smodel = keras.models.load_model('DLOS0.h5') ### this does not work
predictions = smodel.predict(x)
print("Predicted: ",predictions)
Моя первая проблема заключается в том, что цикл do может занять много времени, и он хотел бы иметь возможность векторизовать или упростить его.
Моя вторая проблема заключается в том, что я не могу одновременно загрузить модели, которые были сохранены из цикла do, если мне нужно использовать цикл do. Есть ли способ загрузить все обученные модели в список и использовать их для прогнозирования с новыми данными?