我对 Keras 和深度学习有点陌生。我目前正在尝试复制这篇论文,但是当我编译第二个模型(使用 LSTM)时,出现以下错误:
"TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'"
Run Code Online (Sandbox Code Playgroud)
该模型的描述是这样的:
T
是设备特定的窗口尺寸)size
分别使用滤波器3、5 和 7 的并行一维卷积, stride=1
, number of filters=32
,
activation type=linear
,border mode=same
output_dim=128
output_dim=128
output_dim=128
,activation type=ReLU
output_dim= T
,activation type=linear
我的代码是这样的:
from keras import layers, Input
from keras.models import Model
def lstm_net(T):
input_layer = Input(shape=(T,1))
branch_a = layers.Conv1D(32, 3, activation='linear', padding='same', strides=1)(input_layer)
branch_b = layers.Conv1D(32, 5, activation='linear', padding='same', strides=1)(input_layer) …
Run Code Online (Sandbox Code Playgroud) 我试图使用fit_generator
自定义生成器来读取对于内存来说太大的数据.我想要训练125万行,所以我一次产生50,000行.fit_generator
有25个steps_per_epoch
,我认为每个时期会带来1.25MM.我添加了一个print语句,以便我可以看到该进程正在做多少偏移,并且当它进入epoch 2时,我发现它超过了max.该文件中总共有175万条记录,并且一次它传递了10个步骤,它在create_feature_matrix
调用中得到一个索引错误(因为它没有引入任何行).
def get_next_data_batch():
import gc
nrows = 50000
skiprows = 0
while True:
d = pd.read_csv(file_loc,skiprows=range(1,skiprows),nrows=nrows,index_col=0)
print(skiprows)
x,y = create_feature_matrix(d)
yield x,y
skiprows = skiprows + nrows
gc.collect()
get_data = get_next_data_batch()
... set up a Keras NN ...
model.fit_generator(get_next_data_batch(), epochs=100,steps_per_epoch=25,verbose=1,workers=4,callbacks=callbacks_list)
Run Code Online (Sandbox Code Playgroud)
我使用fit_generator是错误的还是需要对我的自定义生成器进行一些更改才能使其正常工作?
我碰到下面的问题来了的组合flask_sqlalchemy
和mypy
。当我定义一个新的 ORM 对象时:
class Foo(db.Model):
pass
Run Code Online (Sandbox Code Playgroud)
其中db
使用SQL Alchemy创建的数据库应用于flask
应用程序,mypy
类型检查会产生以下错误:
错误:类不能子类化“模型”(类型为“Any”)
我想提一下,我已经sqlalchemy-stubs
安装了。有人可以帮我解决这个错误吗?
我正在 Keras 中进行回归,使用具有 1 个输入、10 个隐藏单元和 1 个输出的神经网络。我像往常一样适合模型:
model.fit(x_train, y_train, nb_epoch=15, batch_size=32)
Run Code Online (Sandbox Code Playgroud)
现在我想预测一个xtest
(asx_train
和y_train
) 一个非常大的一维 numpy 数组。在 Keras 网站的文档中,您可以找到:
predict(self, x, batch_size=32, verbose=0)
Run Code Online (Sandbox Code Playgroud)
所以我知道你必须这样做:
model.predict(xtest, batch_size=32)
Run Code Online (Sandbox Code Playgroud)
我对batch_size
指令感到困惑。这是否意味着predict
以随机方式获取 xtest 的值?
因为我需要的是以与 xtest 给出的完全相同的顺序predict
生成输出。我的意思是,首先预测 xtest[0] 的输出,然后预测 xtest[1] 的输出,然后预测 xtest[2] 的输出......等等。使用该数组预测,我想与我拥有的实际 ytest 进行一些比较并进行一些统计。所以,顺序是必不可少的。我该怎么做?
先感谢您。
在文档中,predict_proba(self, x, batch_size=32, verbose=1)
是
逐批生成输入样本的类概率预测.
并返回
Numpy概率预测数组.
假设我的模型是二元分类模型,输出是[a, b]
,a
是概率class_0
,b
是概率class_1
?
我用这个转换器将Caffe模型转换为Keras.但是我的一个层是类型的slice
,它也需要转换,但转换器目前不支持这个并引发异常.它有什么工作吗?这是我的图层:
layer {
name: "slice_label"
type: SLICE
bottom: "label"
top: "label_wpqr"
top: "label_xyz"
slice_param {
slice_dim: 1
slice_point: 4
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试为一些二进制分类问题训练LSTM.当我loss
在训练后绘制曲线时,会有奇怪的选择.这里有些例子:
这是基本代码
model = Sequential()
model.add(recurrent.LSTM(128, input_shape = (columnCount,1), return_sequences=True))
model.add(Dropout(0.5))
model.add(recurrent.LSTM(128, return_sequences=False))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
new_train = X_train[..., newaxis]
history = model.fit(new_train, y_train, nb_epoch=500, batch_size=100,
callbacks = [EarlyStopping(monitor='val_loss', min_delta=0.0001, patience=2, verbose=0, mode='auto'),
ModelCheckpoint(filepath="model.h5", verbose=0, save_best_only=True)],
validation_split=0.1)
# list all data in history
print(history.history.keys())
# summarize history for loss
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这样的选择发生?有任何想法吗?
在Philippe Remy 关于有状态LSTM 的博客文章中,他在底部说"你可能必须通过调用predict_on_batch()或test_on_batch()来手动进行验证/测试".
查看文档,predict_on_batch执行此操作:
predict_on_batch(self, x)
Returns predictions for a single batch of samples.
Arguments
x: Input samples, as a Numpy array.
Returns
Numpy array(s) of predictions.
Run Code Online (Sandbox Code Playgroud)
test_on_batch执行此操作:
test_on_batch(self, x, y, sample_weight=None)
Test the model on a single batch of samples.
Arguments
x: Numpy array of test data, or list of Numpy arrays if the model has multiple inputs. If all inputs in the model are named, you can also pass a dictionary mapping input …
Run Code Online (Sandbox Code Playgroud) 我正在用Python实现segnet。以下是代码。
img_w = 480
img_h = 360
pool_size = 2
def build_model(img_w, img_h, pool_size):
n_labels = 12
kernel = 3
encoding_layers = [
Conv2D(64, (kernel, kernel), input_shape=(img_h, img_w, 3), padding='same'),
BatchNormalization(),
Activation('relu'),
Convolution2D(64, (kernel, kernel), padding='same'),
BatchNormalization(),
Activation('relu'),
MaxPooling2D(pool_size = (pool_size,pool_size)),
Convolution2D(128, (kernel, kernel), padding='same'),
BatchNormalization(),
Activation('relu'),
Convolution2D(128, (kernel, kernel), padding='same'),
BatchNormalization(),
Activation('relu'),
MaxPooling2D(pool_size = (pool_size,pool_size)),
Convolution2D(256, (kernel, kernel), padding='same'),
BatchNormalization(),
Activation('relu'),
Convolution2D(256, (kernel, kernel), padding='same'),
BatchNormalization(),
Activation('relu'),
Convolution2D(256, (kernel, kernel), padding='same'),
BatchNormalization(),
Activation('relu'),
MaxPooling2D(pool_size = (pool_size,pool_size)),
Convolution2D(512, (kernel, kernel), …
Run Code Online (Sandbox Code Playgroud) Keras在训练卷积自动编码器时抛出ResourceExhaustedError.我正在运行Tensorflow后端.这台电脑既有Nvidia Tesla,内存为11 Gbs,Nvidia Quadro也有6 Gbs的内存.似乎Tensorflow正在使用两个GPU?但我对此并不太清楚.这是我正在使用的代码的最小示例.在我的示例中,数据是一个numpy数组维度=(100,1080,1920,1).
from keras.layers import Convolution2D, MaxPooling2D, UpSampling2D, Activation
from keras.models import Sequential
model = Sequential()
model.add(Convolution2D(16, 3, 3, border_mode='same', input_shape=(1080, 1920, 1)))
model.add(Activation('relu'))
model.add(MaxPooling2D((2, 2), border_mode='same'))
model.add(Convolution2D(16, 3, 3, border_mode='same'))
model.add(Activation('relu'))
model.add(UpSampling2D((2, 2)))
model.add(Convolution2D(1, 3, 3, border_mode='same'))
model.add(Activation('relu'))
model.compile(optimizer='adadelta', loss='binary_crossentropy')
model.fit(data, data)
Run Code Online (Sandbox Code Playgroud)
看起来GPU的内存不足.自动编码器有2625个变量.所以这似乎不足以填满视频内存.阵列数据的大小为1600 MB.所以这也不应该填满视频公羊.我猜这个问题与nb_epoch和batch_size有关,但我不清楚这些参数是做什么的.有没有办法改变这些参数来解决我的问题?
keras ×9
python ×6
lstm ×2
python-3.x ×2
caffe ×1
generator ×1
gpu ×1
keras-layer ×1
mypy ×1
sqlalchemy ×1
tensorflow ×1