Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么keras模型要编译,而fit#u生成器命令抛出一个';模型未编译运行时错误';?_Python_Tensorflow_Keras_Deep Learning - Fatal编程技术网

Python 为什么keras模型要编译,而fit#u生成器命令抛出一个';模型未编译运行时错误';?

Python 为什么keras模型要编译,而fit#u生成器命令抛出一个';模型未编译运行时错误';?,python,tensorflow,keras,deep-learning,Python,Tensorflow,Keras,Deep Learning,我用tensorflow后端在keras中建立了一个自定义CNN,带有K折叠交叉验证。 在开始培训之前调用model.compile()函数,但是model.fit_generator()函数调用会导致运行时错误:“必须在使用模型之前编译模型。” 我使用ImageDataGenerator进行数据扩充,并使用fit_generator函数进行培训 到目前为止,我发现的唯一相关问题与tensorflow特性有关,该特性在Keras中似乎没有启用 代码如下: 模型定义: model = Sequen

我用tensorflow后端在keras中建立了一个自定义CNN,带有K折叠交叉验证。 在开始培训之前调用model.compile()函数,但是model.fit_generator()函数调用会导致运行时错误:“必须在使用模型之前编译模型。”

我使用ImageDataGenerator进行数据扩充,并使用fit_generator函数进行培训

到目前为止,我发现的唯一相关问题与tensorflow特性有关,该特性在Keras中似乎没有启用

代码如下:

模型定义:

model = Sequential()
model.add(Conv2D(24, (5, 5), 
          strides=(1, 1), 
          padding="valid", 
          data_format="channels_last",
          activation='relu', 
          use_bias=True,
          ))#out=96
model.add(Dropout(.25))
model.add(MaxPooling2D(pool_size=(2, 2)))#out=48
model.add(Conv2D(32, (3, 3), 
          strides=(1, 1), 
          padding="valid", 
          data_format="channels_last",
          activation='relu', 
          use_bias=True,
          ))#out=46
model.add(MaxPooling2D(pool_size=(2, 2)))#out=23
model.add(Conv2D(48, (3, 3), 
          strides=(1, 1), 
          padding="valid", 
          data_format="channels_last",
          activation='relu', 
          use_bias=True,
          ))#out=21
model.add(MaxPooling2D(pool_size=(2, 2)))#padding???
model.add(Flatten())
model.add(Dense(3, activation='softmax'))
…这是数据初始化

设置图像生成器:

datagen_training = ImageDataGenerator(
            rotation_range = 20,
            width_shift_range = 0.3,
            height_shift_range=0.3,
            zoom_range=0.2,
            fill_mode = "constant",
            cval = 0,
            vertical_flip = True,
            validation_split = 0.2
            )
datagen_training.fit(data)
模型设置和培训:

rmsprop = optimizers.RMSprop(lr=0.001)#docu says to only tune the learning rate
kf = KFold(n_splits=FOLDS, shuffle = True, random_state=78945)
model.compile(rmsprop, loss = losses.categorical_crossentropy, metrics=[metrics.categorical_accuracy])
acc_hist = []
while True:
    history = object()
    for train_idx, val_idx in kf.split(data, labels):
        x_train, y_train = data[train_idx], labels[train_idx]
        x_val, y_val = data[val_idx], labels[val_idx]
        data_iterator = datagen_training.flow(x_train, y_train, batch_size=BATCH_SIZE)
        history = model.fit_generator(data_iterator, steps_per_epoch=len(x_train) // BATCH_SIZE, epochs=1)
    acc_hist.append(history.history['categorical_accuracy'][0])
    #stop if accuracy doesn't change within 3 epochs
    if stopping_criterion_met:
        break

模型没有编译是因为它没有被构建,也没有被构建是因为没有在第一层中指定
input\u shape
。我不确定数据的输入形状,但对于第一层来说,类似这样的东西将使模型得以编译:

model = Sequential()
model.add(Conv2D(24, (5, 5), 
      strides=(1, 1), 
      padding="valid", 
      data_format="channels_last",
      activation='relu', 
      use_bias=True,
      input_shape=(100,100,1)
      ))#out=96