我有一个简单的NN模型,用于检测使用Keras(Theano后端)在python中编写的28x28px图像的手写数字:
model0 = Sequential()
#number of epochs to train for
nb_epoch = 12
#amount of data each iteration in an epoch sees
batch_size = 128
model0.add(Flatten(input_shape=(1, img_rows, img_cols)))
model0.add(Dense(nb_classes))
model0.add(Activation('softmax'))
model0.compile(loss='categorical_crossentropy',
optimizer='sgd',
metrics=['accuracy'])
model0.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch,
verbose=1, validation_data=(X_test, Y_test))
score = model0.evaluate(X_test, Y_test, verbose=0)
print('Test score:', score[0])
print('Test accuracy:', score[1])
Run Code Online (Sandbox Code Playgroud)
运行良好,我的准确度达到了90%.然后,我执行以下命令,通过执行操作获取网络结构的摘要print(model0.summary())
.这输出如下:
Layer (type) Output Shape Param # Connected to
=====================================================================
flatten_1 (Flatten) (None, 784) 0 flatten_input_1[0][0]
dense_1 (Dense) (None, 10) 7850 flatten_1[0][0]
activation_1 (None, 10) 0 dense_1[0][0] …
Run Code Online (Sandbox Code Playgroud) 我是keras的新手,当我试图在我的linux上运行我的第一个keras程序时,有些事情并没有按照我的意愿去做.这是我的python代码:
import numpy as np
np.random.seed(123)
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Convolution2D, MaxPooling2D
from keras.utils import np_utils
from keras.datasets import mnist
(X_train,y_train),(X_test,y_test) = mnist.load_data()
print X_train.shape
from matplotlib import pyplot as plt
plt.imshow(X_train[0])
Run Code Online (Sandbox Code Playgroud)
最后一句没有显示任何内容.我从教程中复制了那些代码而没有任何修改.在我的计算机上matplotlib的后端没有任何问题.我通过下面的代码测试了它.
import matplotlib.pyplot as plt
data = [[0, 0.25], [0.5, 0.75]]
fig, ax = plt.subplots()
im = ax.imshow(data, cmap=plt.get_cmap('hot'), interpolation='nearest',
vmin=0, vmax=1)
fig.colorbar(im)
plt.show()
Run Code Online (Sandbox Code Playgroud)
而且,我可以打印X_train [0],看起来没有错.
那可能是什么原因呢?为什么我的第一个代码中的imshow()函数没有显示任何内容?
使用Anaconda Python 2.7 Windows 10.
我正在使用Keras exmaple训练语言模型:
print('Build model...')
model = Sequential()
model.add(GRU(512, return_sequences=True, input_shape=(maxlen, len(chars))))
model.add(Dropout(0.2))
model.add(GRU(512, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(len(chars)))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='rmsprop')
def sample(a, temperature=1.0):
# helper function to sample an index from a probability array
a = np.log(a) / temperature
a = np.exp(a) / np.sum(np.exp(a))
return np.argmax(np.random.multinomial(1, a, 1))
# train the model, output generated text after each iteration
for iteration in range(1, 3):
print()
print('-' * 50)
print('Iteration', iteration)
model.fit(X, y, batch_size=128, nb_epoch=1)
start_index = random.randint(0, …
Run Code Online (Sandbox Code Playgroud) 我通过以下步骤(广泛地)使用Keras库训练了情绪分类器模型.
现在,使用此模型进行评分,我能够将模型保存到文件并从文件加载.但是我没有找到将Tokenizer对象保存到文件的方法.如果没有这个,我每次需要得到一个句子时都必须处理语料库.有没有解决的办法?
当您运行Keras神经网络模型时,您可能会在控制台中看到类似的内容:
Epoch 1/3
6/1000 [..............................] - ETA: 7994s - loss: 5111.7661
Run Code Online (Sandbox Code Playgroud)
随着时间的推移,损失有望得到改善.我希望随着时间的推移将这些损失记录到文件中,以便我可以从中学习.我试过了:
logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG)
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我不确定在这种情况下我需要什么级别的日志记录.
我也尝试过使用类似的回调:
def generate_train_batch():
while 1:
for i in xrange(0,dset_X.shape[0],3):
yield dset_X[i:i+3,:,:,:],dset_y[i:i+3,:,:]
class LossHistory(keras.callbacks.Callback):
def on_train_begin(self, logs={}):
self.losses = []
def on_batch_end(self, batch, logs={}):
self.losses.append(logs.get('loss'))
logloss=LossHistory()
colorize.fit_generator(generate_train_batch(),samples_per_epoch=1000,nb_epoch=3,callbacks=['logloss'])
Run Code Online (Sandbox Code Playgroud)
但显然这不是写入文件.无论采用何种方法,通过回调或记录模块或其他任何方式,我都希望听到您将keras神经网络丢失记录到文件中的解决方案.谢谢!
categorical_accuracy
和sparse_categorical_accuracy
Keras有什么区别?这些指标的文档中没有任何提示,并且通过询问谷歌博士,我也没有找到答案.
源代码可以在这里找到:
def categorical_accuracy(y_true, y_pred):
return K.cast(K.equal(K.argmax(y_true, axis=-1),
K.argmax(y_pred, axis=-1)),
K.floatx())
def sparse_categorical_accuracy(y_true, y_pred):
return K.cast(K.equal(K.max(y_true, axis=-1),
K.cast(K.argmax(y_pred, axis=-1), K.floatx())),
K.floatx())
Run Code Online (Sandbox Code Playgroud) classification machine-learning neural-network deep-learning keras
从Keras的imdb数据集恢复原始文本
我想从Keras的imdb数据集中恢复imdb的原始文本.
首先,当我加载Keras的imdb数据集时,它返回了单词索引的序列.
>>> (X_train, y_train), (X_test, y_test) = imdb.load_data()
>>> X_train[0]
[1, 14, 22, 16, 43, 530, 973, 1622, 1385, 65, 458, 4468, 66, 3941, 4, 173, 36, 256, 5, 25, 100, 43, 838, 112, 50, 670, 22665, 9, 35, 480, 284, 5, 150, 4, 172, 112, 167, 21631, 336, 385, 39, 4, 172, 4536, 1111, 17, 546, 38, 13, 447, 4, 192, 50, 16, 6, 147, 2025, 19, 14, 22, 4, 1920, 4613, 469, 4, 22, 71, 87, …
Run Code Online (Sandbox Code Playgroud) 前言
我目前正在研究机器学习问题,我们的任务是使用过去的产品销售数据来预测未来的销售量(以便商店可以更好地计划他们的库存).我们基本上有时间序列数据,对于每一个产品,我们知道在哪几天销售了多少单位.我们还提供有关天气如何,是否有公众假期,是否有任何产品销售等信息.
我们已经能够使用具有密集层的MLP取得一些成功,并且仅使用滑动窗口方法来包括周围几天的销售量.但是,我们相信,通过LSTM等时间序列方法,我们将能够获得更好的结果.
数据
我们的数据基本如下:
(编辑:为清楚起见,上图中的"时间"列不正确.我们每天输入一次,而不是每月一次.但结构是相同的!)
所以X数据的形状如下:
(numProducts, numTimesteps, numFeatures) = (50 products, 1096 days, 90 features)
Run Code Online (Sandbox Code Playgroud)
并且Y数据的形状如下:
(numProducts, numTimesteps, numTargets) = (50 products, 1096 days, 3 binary targets)
Run Code Online (Sandbox Code Playgroud)
因此,我们有三年的数据(2014年,2015年,2016年),并希望对此进行培训,以便对2017年进行预测.(当然,这不是100%正确,因为我们实际上有数据截至2017年10月,但我们只是现在忽略它)
问题
我想在Keras建立一个LSTM,允许我做出这些预测.有几个地方我被卡住了.所以我有六个具体问题(我知道应该尝试将Stackoverflow帖子限制为一个问题,但这些问题都是交织在一起的).
首先,我如何为批次切割数据?由于我有三年的时间,所以只需按顺序推进三批,每次大小一年是否合理?或者更小的批次(比如30天)以及使用滑动窗口更有意义吗?也就是说,不是36个批次,每个30天,我使用36*6批次,每个30天,每次滑动5天?或者这不是真的应该使用LSTM的方式吗?(请注意,数据中存在相当多的季节性,我需要捕捉这种长期趋势).
其次,在这里使用 return_sequences=True
是否有意义?换句话说,我保持我的Y数据是(50, 1096, 3)
这样的(据我所知),每个时间步都有一个预测,可以针对目标数据计算损失?或者我会更好return_sequences=False
,因此只有每批的最终价值用于评估损失(即如果使用年度批次,那么在2016年的产品1,我们评估2016年12月的价值(1,1,1)
).
第三,我该如何处理50种不同的产品?它们是不同的,但仍然强相关,我们已经看到其他方法(例如具有简单时间窗的MLP),当所有产品被考虑在同一模型中时,结果更好.目前摆在桌面上的一些想法是:
第四,我如何处理验证数据?通常我会随机选择一个随机选择的样本进行验证,但在这里我们需要保持时间排序.所以我想最好只是暂时搁置几个月?
第五,这是我可能最不清楚的部分 - 我如何使用实际结果来执行预测?假设我使用return_sequences=False
和训练了三年三次(每次都是11月),目标是训练模型以预测下一个值(2014年12月,2015年12月,2016年12月).如果我想在2017年使用这些结果,这实际上是如何工作的?如果我理解正确的话,我在这个例子中唯一可以做的就是为2017年1月到11月的所有数据点提供模型,它会给我回到2017年12月的预测.这是正确的吗?但是,如果我使用return_sequences=True
,然后对截至2016年12月的所有数据进行培训,那么我是否能够通过给出模型在2017年1月观察到的特征来获得2017年1月的预测?或者我需要在2017年1月之前的12个月内给它吗?那么2017年2月,我是否需要在2017年之前再提供11个月的价值?(如果听起来我很困惑,那是因为我!)
最后,根据我应该使用的结构,我如何在Keras中这样做?我现在想到的是以下几点:(虽然这只适用于一种产品,因此不能解决所有产品都在同一型号中):
Keras代码
trainX = …
Run Code Online (Sandbox Code Playgroud) 运行时:
import spacy
nlp = spacy.load('en')
Run Code Online (Sandbox Code Playgroud)
打印如下:
警告:找不到'en'的模型只加载'en'标记生成器.
/site-packages/spacy/data
除init文件外,它是空的.所有文件路径只指向我的单个python安装.
任何有助于解决此问题的帮助.
谢谢!将
我想知道Keras中激活层和密集层之间的区别是什么.
由于激活层似乎是一个完全连接的层,而Dense有一个参数来传递激活函数,最佳做法是什么?
让我们想象一个像这样的虚构网络:输入 - >密集 - >辍学 - >最后一层最后一层应该是:密集(激活= softmax)还是激活(softmax)?什么是最干净的,为什么?
感谢大家!
keras ×9
python ×7
nlp ×3
logging ×1
lstm ×1
matplotlib ×1
models ×1
spacy ×1
tensorflow ×1
theano ×1