Этот выпуск о модели keras и о том, как скомпилировать модель

Я пытаюсь создать CNN в pycharm. Когда я запускаю свой код, консоль выводит
RuntimeError: You must compile your model before using it.

Записываю compile. Это мой код:

#!/usr/bin/env python
# -*- coding: utf-8 -*-o
from keras.models import Sequential
from keras.layers import Dense, MaxPool2D, Flatten, Conv2D, Dropout
from keras.preprocessing import image
from keras.optimizers import adadelta

generator = image.ImageDataGenerator(
                rescale=1./255,
                featurewise_center=False,
                samplewise_center=False,
                featurewise_std_normalization=False,
                samplewise_std_normalization=False,
                zca_whitening=False,
                rotation_range=10,
                width_shift_range=0.1,
                height_shift_range=0.1,
                horizontal_flip=True,
                vertical_flip=False,
               )

dateset = generator.flow_from_directory(
               shuffle=True,
               batch_size=100,
               target_size=(80, 80),
               directory='/Users/Username/Documents/Project AI/Dateset/blood-cells/dataset2-master/images/TRAIN')


def model():
    model = Sequential()
    model.add(Conv2D(80, (3, 3), strides=(1, 1), activation='relu'))
    model.add(Conv2D(64, (3, 3), strides=(1, 1), activation='relu',     
              input_shape=(80, 80, 3)))
    model.add(MaxPool2D(pool_size=(2, 2)))
    model.add(Conv2D(64, (3, 3), strides=(1, 1), activation='relu'))
    model.add(Dropout(0.25))
    model.add(Flatten())
    model.add(Dense(128, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(4, activation='softmax'))
    model.compile(optimizer=adadelta(lr=0.001),    
    loss='categorical_crossentropy', metrics=['accuracy'])
    return model

nn = model()
nn.fit_generator(dateset,steps_per_epoch=None, epochs=30, verbose=1)
nn.save('/Users/yangzichen/Documents/Project AI/Model.txt')

Добро пожаловать в SO. Пожалуйста, правильно отформатируйте свой код. Спасибо!

petezurich 14.10.2018 17:09
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
47
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, вы перезаписываете функцию Keras model() своей функцией. Попробуйте вместо этого:

def get_model():  
    model = Sequential() 
    ...
    < *rest of your function code here* >
    ...

    return model

nn = get_model()

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

杨子辰 15.10.2018 16:21

Не стоит беспокоиться. В чем проблема сейчас? Если это другая проблема, я предлагаю вам задать другие вопросы и пометить их как решенные (например, приняв мой ответ). В противном случае вам необходимо предоставить дополнительную информацию.

petezurich 15.10.2018 16:47

Другие вопросы по теме