Суть проблемы доступна здесь: https://gist.github.com/sankhaMukherjee/97c212072385ee36ebd8bfab9a801794
По сути, я пытаюсь создать обобщенный класс, который можно использовать в качестве шаблонного примера для моих проектов с тензорным потоком.Приведенная суть - самый тривиальный пример, который мне удалось придумать.Я понимаю, что это связано с пространствами имен, но я не уверен, как я могу решить эту проблему.
У меня есть класс Test
со следующими функциями-членами:
__init__(self, inpShape, outShape, layers, activations)
saveModel(self, sess)
restoreModel(self, sess, restorePoint)
fit(self, X, y, Niter=101, restorePoint=None)
predict(self, X, restorePoint=None)
Сами функции тривиальны, и их можно посмотреть в рамках предоставленной сущности.Теперь, учитывая этот класс, мы можем попробовать протестировать его, чтобы увидеть, как он работает:
X = np.random.random((10000, 2))
y = (2*X[:, 0] + 3*X[:, 1]).reshape(-1, 1)
inpShape = (None, 2)
outShape = (None, 1)
layers = [7, 1]
activations = [tf.sigmoid, None]
t = Test(inpShape, outShape, layers, activations)
t.fit(X, y, 10000)
yHat = t.predict(X, restorePoint=t.restorePoints[-1])
plt.plot(yHat, y, '.', label='original')
Это все хорошо!
Теперь мы хотим создать еще один экземпляр того же класса,и восстановить модель, сохраненную отсюда.Именно здесь весь ад высвобождается.Давайте обновим вышеупомянутое, чтобы учесть, что:
X = np.random.random((10000, 2))
y = (2*X[:, 0] + 3*X[:, 1]).reshape(-1, 1)
inpShape = (None, 2)
outShape = (None, 1)
layers = [7, 1]
activations = [tf.sigmoid, None]
t = Test(inpShape, outShape, layers, activations)
t.fit(X, y, 10000)
yHat = t.predict(X, restorePoint=t.restorePoints[-1])
plt.plot(yHat, y, '.', label='original')
if True: # In the gist, turn this to True for seeing the problem
t1 = Test(inpShape, outShape, layers, activations)
yHat1 = t1.predict(X, restorePoint=t.restorePoints[-1])
plt.plot(yHat1, y, '.', label='copied')
Оказывается, мы больше не можем этого делать.Это полностью испортит все с совершенно новым графиком наряду со старым.Возможно ли теперь создать новый экземпляр класса, который копирует старый граф, а не создавать совершенно новый экземпляр старого графа?