我试图使用我对 Keras 文档中示例代码的修改,该文档展示了在使用图像掩码代替标签的情况下如何设置 image_datagen.flow_from_directory() (用于图像分割,我们在其中预测一个类)对于每个像素)。
顺便说一下,我设置了 featurewise_center = True ,试图从每个图像的颜色通道中减去所有训练图像的每个颜色通道的平均值,这样在整个训练集中,每个颜色通道的平均值将为 0。我希望这样不是实现此目的的方法。
无论如何,这是我生成错误的代码:
image_datagen = ImageDataGenerator(featurewise_center = True)
mask_datagen = ImageDataGenerator()
image_generator = image_datagen.flow_from_directory(
'/home/icg/Martin/train_data_graz/images_rect_r640x360',
class_mode = None,
batch_size = 1,
seed = 123)
mask_generator = mask_datagen.flow_from_directory(
'/home/icg/Martin/train_data_graz/labels_rect_r640x360',
class_mode = None,
batch_size = 1,
seed = 123)
# combine generators into one which yields image and masks
train_generator = zip(image_generator, mask_generator)
model.fit_generator(
train_generator,
steps_per_epoch = 1000,
epochs = 100)
Run Code Online (Sandbox Code Playgroud)
这是错误消息:
Found 0 images belonging to 0 classes.
Found 0 images belonging …Run Code Online (Sandbox Code Playgroud) 我在Jupyter Notebook中使用Keras 2.0.8和Python 3内核.我的后端是TensorFlow 1.3,我正在Mac上开发.
每当我使用fit_generator()时,我都会收到以下警告:
/Users/username/anaconda/envs/tensorflow/lib/python3.6/site-packages/ipykernel/ main .py:5:UserWarning:Keras 2参数的语义与Keras
steps_per_epoch1参数不同samples_per_epoch.steps_per_epoch是每个时代从发电机中抽取的批次数.基本上是steps_per_epoch = samples_per_epoch/batch_size.同样nb_val_samples- >validation_steps和val_samples- >steps参数已更改.相应地更新方法调用./Users/username/anaconda/envs/tensorflow/lib/python3.6/site-packages/ipykernel/ main .py:5:UserWarning:更新您fit_generator对Keras 2 API的调用:fit_generator(<keras.pre..., steps_per_epoch=60000, validation_data=<keras.pre..., epochs=1, validation_steps=10000)
下面是我的模型的代码(简单的MNIST线性分类器,但我对我使用的每个模型都收到此警告):
model = Sequential([
Lambda(normalize_input, input_shape=(1, 28, 28)),
Flatten(),
Dense(10, activation='softmax')
])
model.compile(Adam(),
loss='categorical_crossentropy',
metrics=['accuracy'])
Run Code Online (Sandbox Code Playgroud)
这是我的fit_generator()调用:
model.fit_generator(batches,
steps_per_epoch=steps_per_epoch,
nb_epoch=1,
validation_data=test_batches,
nb_val_samples=test_batches.n)
Run Code Online (Sandbox Code Playgroud)
我理解这个警告告诉我的是什么.在我的情况下,这不是问题.我怎么能摆脱它?
在尝试保存Keras模型时遇到了一些麻烦:
这是我的代码:
import h5py
from keras.models import load_model
try:
import h5py
print ('import fine')
except ImportError:
h5py = None
left.save('left.h5') # creates a HDF5 file 'my_model.h5'
left_load = load_model('left.h5')
Run Code Online (Sandbox Code Playgroud)
但即使代码打印我也遇到以下错误'import fine':
import fine
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-145-b641e79036fa> in <module>()
8 h5py = None
9
---> 10 left.save('left.h5') # creates a HDF5 file 'my_model.h5'
/usr/local/lib/python3.4/dist-packages/keras/engine/topology.py in save(self, filepath, overwrite, include_optimizer)
2504 """
2505 from ..models import save_model
-> 2506 save_model(self, filepath, overwrite, include_optimizer)
2507
2508 …Run Code Online (Sandbox Code Playgroud) 我想使用keras层Flatten()或Reshape((-1,))在模型的末尾输出一维矢量[0,0,1,0,0, ... ,0,0,1,0].
可悲的是,由于我未知的输入形状存在问题:
input_shape=(4, None, 1))).
所以通常输入形状介于两者之间[batch_size, 4, 64, 1],[batch_size, 4, 256, 1]输出应该是batch_size x未知维度(对于上面的第一个例子:[batch_size, 64]和对于secound [batch_size, 256]).
我的模型看起来像:
model = Sequential()
model.add(Convolution2D(32, (4, 32), padding='same', input_shape=(4, None, 1)))
model.add(BatchNormalization())
model.add(LeakyReLU())
model.add(Convolution2D(1, (1, 2), strides=(4, 1), padding='same'))
model.add(Activation('sigmoid'))
# model.add(Reshape((-1,))) produces the error
# int() argument must be a string, a bytes-like object or a number, not 'NoneType'
model.compile(loss='binary_crossentropy', optimizer='adadelta')
Run Code Online (Sandbox Code Playgroud)
所以我当前的输出形状是[batchsize,1,unknown dimension,1].例如,这不允许我使用class_weights …
我想知道我的模型的特异性和敏感性.目前,我正在评估所有时期结束后的模型:
from sklearn.metrics import confusion_matrix
predictions = model.predict(x_test)
y_test = np.argmax(y_test, axis=-1)
predictions = np.argmax(predictions, axis=-1)
c = confusion_matrix(y_test, predictions)
print('Confusion matrix:\n', c)
print('sensitivity', c[0, 0] / (c[0, 1] + c[0, 0]))
print('specificity', c[1, 1] / (c[1, 1] + c[1, 0]))
Run Code Online (Sandbox Code Playgroud)
这种方法的缺点是,我只能在训练结束时得到我关心的输出.宁愿每10个纪元左右获得指标.
BTW:和metrics=[]这里一起试过.可能回调是要走的路?
对于某些问题,验证数据不能是生成器,例如:TensorBoard直方图:
如果打印直方图,则必须提供validation_data,并且不能是生成器。
我当前的代码如下所示:
image_data_generator = ImageDataGenerator()
training_seq = image_data_generator.flow_from_directory(training_dir)
validation_seq = image_data_generator.flow_from_directory(validation_dir)
testing_seq = image_data_generator.flow_from_directory(testing_dir)
model = Sequential(..)
# ..
model.compile(..)
model.fit_generator(training_seq, validation_data=validation_seq, ..)
Run Code Online (Sandbox Code Playgroud)
validation_data=(x_test, y_test)?我正在比较不同类型数据质量的拟合精度结果。“好数据”是特征值中没有任何 NA 的数据。“坏数据”是特征值中带有 NA 的数据。“坏数据”应该通过一些值修正来修复。作为值修正,它可能用零或平均值替换 NA。
在我的代码中,我试图执行多个拟合程序。
查看简化代码:
from keras import backend as K
...
xTrainGood = ... # the good version of the xTrain data
xTrainBad = ... # the bad version of the xTrain data
...
model = Sequential()
model.add(...)
...
historyGood = model.fit(..., xTrainGood, ...) # fitting the model with
# the original data without
# NA, zeroes, or the feature mean values
Run Code Online (Sandbox Code Playgroud)
根据historyGood数据查看拟合精度图:
之后,代码重置存储的模型并使用“坏”数据重新训练模型:
K.clear_session()
historyBad = model.fit(..., xTrainBad, ...)
Run Code Online (Sandbox Code Playgroud)
根据historyBad数据查看拟合过程结果:
可以注意到,初始精度 …
问题
我想用可变相关性数据训练 keras2 神经网络(theano 后端)。这意味着某些样本不如其他样本重要。他们对培训的影响要小于其他人。但是我不能简单地完全省略它们(我有一个进入Conv1D层的时间序列)。
题
我如何告诉 keras 在训练期间对某些训练数据样本的权重小于其他样本?
主意
我在想定义自己的损失函数是需要y_true,y_pred并y_weight作为第三个参数。就像是:
def mean_squared_error_weighted(y_true, y_pred, y_weight):
return y_weight * K.mean(K.square(y_pred - y_true), axis=-1)
Run Code Online (Sandbox Code Playgroud)
但是我如何让 keras 知道第三个参数?
我加载了数百个图像ImageGenerator及其flow_from_dirctory-function来自验证目录(和测试目录)中的两个目录(两个类),名称为“cats”和“dogs”:
validation_generator = test_datagen.flow_from_directory(
root_dir + '/validate',
target_size=(img_x, img_y),
batch_size=batch_size,
color_mode='grayscale',
class_mode='input', # necessarry for autoencoder
shuffle=False, # must be false otherwise filenames are wrong
seed = seed)
Run Code Online (Sandbox Code Playgroud)
使用一些 Keras 模型生成和拟合后,我想调试示例图像:我想从中获取图像validation_generator并在其上运行模型。但我必须知道图像首先位于哪个目录或它被分配到的类。
对于绘图我使用:
import matplotlib.pyplot as plt
n = 7
x,y = validation_generator.next()
for i in range(0,n):
image_x = x[i,:,:,0]
#print(validation_generator.class_indices) # always shows the same
print(validation_generator.filenames[i]) # only OK if shuffle=false
plt.imshow(image_x)
plt.show()
Run Code Online (Sandbox Code Playgroud)
validation_generator.filenames[i]我只能找到解析并获取它的目录的可能性。还有其他更优雅的方法吗?
我正在使用 CNN、Keras 和 Windows 上的 Tensorflow 后端创建叶识别分类器。我已经安装了 Anaconda、Tensorflow、numpy、scipy 和 keras。
我使用 pip3 安装了 keras:
C:\> pip3 list | grep -i keras
Keras 2.2.4
Keras-Applications 1.0.6
Keras-Preprocessing 1.0.5
Run Code Online (Sandbox Code Playgroud)
但是,当我运行我的项目时,出现以下错误
ModuleNotFoundError: No module named 'keras'
Run Code Online (Sandbox Code Playgroud)
为什么找不到模块,我该如何解决这个错误?
keras-2 ×10
keras ×9
python ×8
tensorflow ×4
h5py ×1
marshalling ×1
numpy ×1
python-3.x ×1
tf.keras ×1
windows ×1