2017-12-11 10 views
0

Keras를 사용하는 간단한 피드 포워드 신경망을 사용하여 MNIST 데이터 세트의 숫자를 분류합니다. 그래서 아래 코드를 실행합니다.Keras, models.add() missing 1 필수 위치 인수 : 'layer'

model.add(Dense(1000, input_dim=(INPUT_SIZE,), activation="relu")) 
    TypeError: add() missing 1 required positional argument: 'layer' 

구문이 정확히 같은 keras의 문서에 나와 있습니다

import os 
import tensorflow as tf 

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

from tensorflow.examples.tutorials.mnist import input_data 

mnist = input_data.read_data_sets('/tmp/data', one_hot=True) 

# Path to Computation graphs 
LOGDIR = './graphs_3' 

# start session 
sess = tf.Session() 

#Hyperparameters 
LEARNING_RATE = 0.01 
BATCH_SIZE = 1000 
EPOCHS = 10 

# Layers 
HL_1 = 1000 
HL_2 = 500 

# Other Parameters 
INPUT_SIZE = 28*28 
N_CLASSES = 10 

model = Sequential 
model.add(Dense(HL_1, input_dim=(INPUT_SIZE,), activation="relu")) 
#model.add(Activation(activation="relu")) 
model.add(Dense(HL_2, activation="relu")) 
#model.add(Activation("relu")) 
model.add(Dropout(rate=0.9)) 
model.add(Dense(N_CLASSES, activation="softmax")) 

model.compile(
    optimizer="Adam", 
    loss="categorical_crossentropy", 
    metrics=['accuracy']) 



# one_hot_labels = keras.utils.to_categorical(labels, num_classes=10) 

model.fit(
    x=mnist.train.images, 
    y=mnist.train.labels, 
    epochs=EPOCHS, 
    batch_size=BATCH_SIZE) 


score = model.evaluate(
    x=mnist.test.images, 
    y=mnist.test.labels) 

print("score = ", score) 

그러나, 나는 다음과 같은 오류가 발생합니다. 나는 keras 2.0.9를 사용하고 있으므로 버전 제어 문제라고 생각하지 않습니다. 내가 뭐 잘못 했어요?

답변

4

그것은 ....

을 정말 완벽한 것 같다하지만, 당신이 대신 클래스 이름을 사용하여 사용자가 순차적 모델의 "인스턴스"를 생성하지 않는 눈치 : 방법부터

#yours: model = Sequential 
#correct: 
model = Sequential() 

클래스에서 항상 self이 첫 번째 인수로 포함되어 선언됩니다. 인스턴스가없는 메소드를 호출하면 인스턴스가 첫 번째 인수 (즉, self)로 필요합니다.

이 방법의 정의는 def add(self,layer,...):

입니다.