Модуль TenSource не имеет атрибута get_default_graph - мне не нужен график - PullRequest
0 голосов
/ 11 июля 2019

для моей степени магистра, я пытаюсь создать простую нейронную сеть. Но в моем коде есть некоторые ошибки, поэтому программа останавливается и не создает обученную модель.

Я не мог понять, что сообщение об ошибке хочет сказать мне и что мне нужно изменить в моем коде. Поэтому мне нужна ваша помощь. Я погуглил ошибку, но не понял и не смог решить ее с помощью предложенных идей других постов.

Может кто-нибудь объяснить мне, почему тензор потока хочет создать граф, и как это возможно, что фреймворк не знает, какая ему необходима функция? Нужно ли устанавливать пакет для визуализации? Можно ли игнорировать эту ошибку?

Мне не нужна графика. Но нужен ли компьютер для классификации и расчета по мл-алгоритму?

Прошу прощения за мой плохой английский и за то, что я не знал о Tensorflow.

Заранее спасибо!

Я установил новейшую версию tenenflow 2.0.0-бета1, а также последнюю версию keras.

Кроме того, я попытался создать несколько графиков, чтобы показать процесс классификации. Не работает.

Я также активировал пошаговый режим отладки, чтобы выяснить мою проблему. Кажется, ошибка появляется внутри функцииvalu_model, в которой я создаю, обучаю и оцениваю нейронную сеть.

Ошибка возникает в процессе создания модели (модель = Sequantial ()).

# -*- coding: utf-8 -*-
"""
Created on Wed Apr  3 16:26:14 2019

@author: mattdoe
"""

from data_preprocessor_db import data_storage # validation data
from sklearn.model_selection import StratifiedKFold
from sklearn.metrics import confusion_matrix
from keras.utils import to_categorical
from keras.models import Sequential
from keras.layers import Dense
from keras.utils import normalize
from numpy import mean
from numpy import std
from numpy import array



# create and evaluate a single multi-layer-perzeptron
def evaluate_model(Train, Test, Target_Train, Target_Test):
    # define model
    model = Sequential()
    # input layer automatically created
    model.add(Dense(9, input_dim=9, kernel_initializer='normal', activation='relu')) # 1st hidden layer
    model.add(Dense(9, kernel_initializer='normal', activation='relu')) # 2nd hidden layer
    model.add(Dense(9, activation='softmax')) #output layer

    # create model
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

    # fit model
    model.fit(Train, to_categorical(Target_Train), epochs=50, verbose=0)

    # evaluate the model
    test_loss, test_acc = model.evaluate(Test, to_categorical(Target_Test), verbose=0)

    # as well: create a confussion matrix
    predicted = model.predict(Test)
    conf_mat = confusion_matrix(Target_Test, predicted)

    return model, test_acc, conf_mat



# for seperation of data_storage
# Link_ID = []
Input, Output = list(), list()

# list all results of k-fold cross-validation
scores, members, matrix = list(), list(), list()

# seperate data_storage in Input and Output data
for items in data_storage:
    # Link_ID = items[0] # identifier not needed
    Input.append([items[1], items[2], items[3], items[4], items[5], items[6], items[7], items[8], items[9]]) # Input: all characteristics
    Output.append(items[10]) # Output: scenario_class 1 to 8

# change to numpy_array (scalar index array)
Input = array(Input)
Output = array(Output)

# normalize Data
Input = normalize(Input)
# Output = normalize(Output) not needed; categorical number

# prepare k-fold cross-validation
kfold = StratifiedKFold(n_splits=15, random_state=1, shuffle=True)

for train_ix, test_ix in kfold.split(Input, Output):
    # select samples
    Train, Target_Train = Input[train_ix], Output[train_ix]
    Test, Target_Test = Input[test_ix], Output[test_ix]

    # evaluate model
    model, test_acc, conf_mat = evaluate_model(Train, Test, Target_Train, Target_Test)

    # display each evalution result
    print('>%.3f' % test_acc)

    # add result to list
    scores.append(test_acc)
    members.append(model)
    matrix.append(conf_mat)

# summarize expected performance
print('Estimated Accuracy %.3f (%.3f)' % (mean(scores), std(scores)))
# as well in confursion_matrix
print ('Confussion Matrix %' %(mean(matrix)))



# save model // trained neuronal network
model.save('neuronal_network_1.h5')

Этот след отображается в Spyder:

Traceback (most recent call last):

  File "<ipython-input-12-25afb095a816>", line 1, in <module>
    runfile('C:/Workspace/Master-Thesis/Programm/MapValidationML/ml_neuronal_network_1.py', wdir='C:/Workspace/Master-Thesis/Programm/MapValidationML')

  File "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 786, in runfile
    execfile(filename, namespace)

  File "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/Workspace/Master-Thesis/Programm/MapValidationML/ml_neuronal_network_1.py", line 77, in <module>
    model, test_acc, conf_mat = evaluate_model(Train, Test, Target_Train, Target_Test)

  File "C:/Workspace/Master-Thesis/Programm/MapValidationML/ml_neuronal_network_1.py", line 24, in evaluate_model
    model = Sequential()

  File "C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\sequential.py", line 87, in __init__
    super(Sequential, self).__init__(name=name)

  File "C:\ProgramData\Anaconda3\lib\site-packages\keras\legacy\interfaces.py", line 91, in wrapper
    return func(*args, **kwargs)

  File "C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\network.py", line 96, in __init__
    self._init_subclassed_network(**kwargs)

  File "C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\network.py", line 294, in _init_subclassed_network
    self._base_init(name=name)

  File "C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\network.py", line 109, in _base_init
    name = prefix + '_' + str(K.get_uid(prefix))

  File "C:\ProgramData\Anaconda3\lib\site-packages\keras\backend\tensorflow_backend.py", line 74, in get_uid
    graph = tf.get_default_graph()

AttributeError: module 'tensorflow' has no attribute 'get_default_graph'

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

Изменить импортированный модуль. Надеюсь, что этот метод может решить вашу ошибку.

from tensorflow.keras.utils import to_categorical
from tensorflow.keras.models  import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.utils import normalize
0 голосов
/ 11 июля 2019

Если вы используете бета-версию tf 2.0, убедитесь, что все ваши импорты keras равны tensorflow.keras... любой импорт keras подхватит стандартный пакет keras, который предполагает тензор потока 1.4.

т.е. используйте:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, ...
...