属性错误:'Sequential'对象没有'total_loss'属性。

4

我已经花了几天的时间试图解决这个问题,但一直没有头绪。我正在使用tensorflow-gpu v1.13.1,但只找到了两个其他帖子提到了类似的错误。

错误重现:

import numpy as np
import tensorflow as tf
from tensorflow import keras
def createModel():
    model = tf.keras.models.Sequential()
    model.add(tf.keras.layers.Dense(5, activation=tf.nn.relu))
    model.add(tf.keras.layers.Dense(5, activation=tf.nn.relu))
    model.add(tf.keras.layers.Dense(1, activation=tf.nn.sigmoid))
    model.compile(optimizer='sgd',
                  loss='mean_squared_error')
    return model

def array_generator():
    yield np.array([0.1,0.2,0.3,0.4,0.5]), np.array([1])

model=createModel()
model.fit_generator(array_generator(), epochs=5, steps_per_epoch=5)

我正在尝试制作一个神经网络来将文件分类为恶意或非恶意。原始源代码中,X_train、y_train、X_test和y_test都是numpy数组。

import tensorflow as tf
import numpy as np
import ember
import random
X_train, y_train, X_test, y_test = ember.read_vectorized_features("C:\\Users\Cody\Desktop\synopsys\data\ember")
metadata_dataframe = ember.read_metadata("C:\\Users\Cody\Desktop\synopsys\data\ember")


#load testing set
def loadTestSet():
    X_test_tf = tf.convert_to_tensor(X_test, np.float32)
    y_test_tf = tf.convert_to_tensor(y_test, np.float32)
    return X_test_tf, y_test_tf

#create compiled keras model
def createModel():
    model = tf.keras.models.Sequential()
    #ADD L2 REGULARIZATION LATER
    model.add(tf.keras.layers.Dense(7351, activation=tf.nn.relu))
    '''model.add(tf.keras.layers.Dropout(0.2))
    model.add(tf.keras.layers.Dense(4096, activation=tf.nn.relu))'''
    model.add(tf.keras.layers.Dropout(0.2))
    model.add(tf.keras.layers.Dense(4096, activation=tf.nn.relu))
    model.add(tf.keras.layers.Dropout(0.2))
    model.add(tf.keras.layers.Dense(4096, activation=tf.nn.relu))
    model.add(tf.keras.layers.Dropout(0.2))
    model.add(tf.keras.layers.Dense(2048, activation=tf.nn.relu))
    model.add(tf.keras.layers.Dropout(0.2))
    model.add(tf.keras.layers.Dense(2048, activation=tf.nn.relu))
    model.add(tf.keras.layers.Dropout(0.2))
    model.add(tf.keras.layers.Dense(2048, activation=tf.nn.relu))
    model.add(tf.keras.layers.Dropout(0.2))
    model.add(tf.keras.layers.Dense(1024, activation=tf.nn.relu))
    model.add(tf.keras.layers.Dropout(0.2))
    model.add(tf.keras.layers.Dense(1024, activation=tf.nn.relu))
    model.add(tf.keras.layers.Dropout(0.2))
    model.add(tf.keras.layers.Dense(1024, activation=tf.nn.relu))
    model.add(tf.keras.layers.Dropout(0.2))
    model.add(tf.keras.layers.Dense(1024, activation=tf.nn.relu))
    model.add(tf.keras.layers.Dropout(0.2))
    model.add(tf.keras.layers.Dense(1, activation=tf.nn.sigmoid))
    #adam metrhod for stochastic gradient descent
    model.compile(optimizer='adam',
                  loss='categorical_crossentropy',
                  metrics=['accuracy'])
    return model

def generate_arrays(features, labels, batch_size):
    batch_features=np.zeros((batch_size, 7351), dtype=np.float32)
    batch_labels=np.zeros((batch_size, 1), dtype=np.float32)
    while True:
        for i in range(batch_size):
            index=random.choice(900000,1)
            batch_features=X_train[index]
            batch_labels=y_train[index]
        yield batch_features, batch_labels

print('creating model')
model=createModel()
print('training model')
model.fit_generator(generate_arrays(X_train, y_train, 500), epochs=10, steps_per_epoch=1800)
print('testing model')
X_test_tf, y_test_tf = loadTestSet()
model.evaluate(X_test_tf, y_test_tf)

以下是我的错误信息:

Traceback (most recent call last): File "C:/Users/Cody/Desktop/synopsys/train.py", line 76, in model.fit_generator(generate_arrays(X_train, y_train, 500), epochs=10, steps_per_epoch=1800) File "C:\Users\Cody\AppData\Local\conda\conda\envs\emberenv\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1426, in fit_generator initial_epoch=initial_epoch) File "C:\Users\Cody\AppData\Local\conda\conda\envs\emberenv\lib\site-packages\tensorflow\python\keras\engine\training_generator.py", line 125, in model_iteration model, mode, class_weight=class_weight) File "C:\Users\Cody\AppData\Local\conda\conda\envs\emberenv\lib\site-packages\tensorflow\python\keras\engine\training_generator.py", line 427, in _make_execution_function model._make_fit_function() File "C:\Users\Cody\AppData\Local\conda\conda\envs\emberenv\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1926, in _make_fit_function '_fit_function', [self.total_loss] + metrics_tensors) AttributeError: 'Sequential' 对象没有属性“total_loss”

非常感谢您的帮助,我已经被这个问题困扰了很长时间。

2个回答

2

我曾经帮助一个朋友解决过类似的问题(AttributeError: 'Sequential' object has no attribute 'total_loss')。经过数小时的排查,我们通过升级tensorflow到2.0.0-alpha0版本解决了这个问题。我们还需要进行“pip install pillow”操作。


1

1
谢谢您的回复。我已经看到了那个线程;我目前正在使用tensorflow-gpu 1.13.1和keras 2.2.4,它们都是最新版本。如果有帮助的话,我还在一个更小的文件中重新创建了这个错误。 - user3827247
你确定你的conda环境正在使用这些版本吗?因为似乎keras调用的tensorflow API不存在。 - Joey Pinto
是的,我非常确定我正在使用那些版本。我已经在anaconda、我的IDE和通过打印tensorflow/keras版本进行了验证。此外,那个github问题与我的问题不同,它说缺少“model”属性,而不是“total_loss”属性。我已经知道model.model已被弃用和删除。 - user3827247
"Total_loss" 属性可能被准确度指标使用,您可以删除准确度指标以确认该问题是否仍然存在,我正在尝试缩小问题范围。 - Joey Pinto
去掉准确性并没有起到任何作用。另外,感谢您花时间帮助我解决这个问题,真的非常感激。 - user3827247
可能有帮助的是,当我使用fit_generator()函数时才出现了这个问题,而当我使用fit(X,y, epochs=5)时则完美运行(但在我的实际项目中无法这样做,因为数据集太大)。 - user3827247

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接