我有一个8000帧的视频,我想在每个200帧的批次上训练一个Keras模型.我有一个帧生成器,逐帧循环通过视频,并将(3 x 480 x 640)帧累积成一个X形状的numpy矩阵(200, 3, 480, 640)- (批量大小,rgb,帧高,帧宽) - 并且产生X和Y每第200帧:
import cv2
...
def _frameGenerator(videoPath, dataPath, batchSize):
"""
Yield X and Y data when the batch is filled.
"""
camera = cv2.VideoCapture(videoPath)
width = camera.get(3)
height = camera.get(4)
frameCount = int(camera.get(7)) # Number of frames in the video file.
truthData = _prepData(dataPath, frameCount)
X = np.zeros((batchSize, 3, height, width))
Y = np.zeros((batchSize, 1))
batch = 0
for frameIdx, truth in enumerate(truthData): …Run Code Online (Sandbox Code Playgroud) 以下代码返回NameError: global name 'self' is not defined.为什么?
lengths = [3, 10]
self.fooDict = getOrderedDict(stuff)
if not all(0 < l < len(self.fooDict) for l in lengths):
raise ValueError("Bad lengths!")
Run Code Online (Sandbox Code Playgroud)
请注意,这self.fooDict是一个有35个条目的OrderedDict(从集合库导入).当我尝试调试时,下面的代码执行没有错误:
(Pdb) len(self.dataDict)
35
(Pdb) all(0 < size < 35 for size in lengths)
True
Run Code Online (Sandbox Code Playgroud)
但是下面的debugginf代码给出了原始错误:
(Pdb) baz = len(self.dataDict)
(Pdb) all(0 < size < baz for size in lengths)
NameError: global name 'baz' is not defined
Run Code Online (Sandbox Code Playgroud) 我倾向于用括号来索引numpy数组(矩阵),但我注意到当我想切片数组(矩阵)时我必须使用逗号表示法.为什么是这样?例如,
>>> x = numpy.array([[1, 2], [3, 4], [5, 6]])
>>> x
array([[1, 2],
[3, 4],
[5, 6]])
>>> x[1][1]
4 # expected behavior
>>> x[1,1]
4 # expected behavior
>>> x[:][1]
array([3, 4]) # huh?
>>> x[:,1]
array([2, 4, 6]) # expected behavior
Run Code Online (Sandbox Code Playgroud) 我想在Keras中实现LSTM用于流时间序列预测 - 即,在线运行,一次获得一个数据点.这在这里得到了很好的解释,但正如人们所假设的那样,在线LSTM的训练时间可能非常慢.我想在迷你批次上训练我的网络,并在线测试(运行预测).在Keras这样做的最佳方法是什么?
例如,小批量可以是[33, 34, 42, 33, 32, 33, 36, ... 24, 23]在连续时间步骤发生的1000个数据值()的序列.为了训练网络,我已经指定了一个X形状数组(900, 100, 1),其中有900个长度为100的序列和一个y形状数组(900, 1).例如,
X[0] = [[33], [34], [42], [33], ...]]
X[1] = [[34], [42], [33], [32], ...]]
...
X[999] = [..., [24]]
y[999] = [23]
Run Code Online (Sandbox Code Playgroud)
因此,对于每个序列X[i],都有一个对应的y[i]代表时间序列中的下一个值 - 我们想要预测的内容.
在测试中,我想预测下一个数据值1000到1999.我通过(1, 100, 1)为1000到1999的每个步骤提供一个形状数组来做到这一点,模型试图在下一步预测值.
这是我的问题的推荐方法和设置吗?启用有状态可能是实现纯粹在线实施的方式,但在Keras中,这需要一致batch_input_shape的培训和测试,这对我的小批量培训和在线测试的意图不利.或者我有办法做到这一点吗?
更新:尝试以@nemo推荐的方式实施网络
我在博客文章"使用Keras的Python中使用LSTM循环神经网络进行时间序列预测"的示例网络上运行了我自己的数据集,然后尝试将预测阶段实现为有状态网络.
模型构建和培训对于两者都是相同的:
# Create and fit the LSTM network
numberOfEpochs = 10 …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过这样做来创建输入流
InputStream is = (InputStream) getResources().openRawResource(R.drawable.image1);
Run Code Online (Sandbox Code Playgroud)
但我遇到了关于我的drawable文件(R.drawable.image1)的错误"类型原始的预期资源".image1是一个png,位于我的res/drawable文件夹中.
有任何想法吗???
Python的namedtuple作为一个轻量级,不可变的数据类非常有用.我喜欢将它们用于簿记参数而不是字典.当需要更多功能时,例如简单的文档字符串或默认值,您可以轻松地将namedtuple重构为类.但是,我已经看到继承自namedtuple的类.他们获得了什么功能,他们失去了什么表现?例如,我会将其实现为
from collections import namedtuple
class Pokemon(namedtuple('Pokemon', 'name type level')):
"""
Attributes
----------
name : str
What do you call your Pokemon?
type : str
grass, rock, electric, etc.
level : int
Experience level [0, 100]
"""
__slots__ = ()
Run Code Online (Sandbox Code Playgroud)
唯一的目的是能够干净地记录attrs,并__slots__用于防止创建__dict__(保持namedtuples的轻量级特性).
是否有更好的建议使用轻量级数据类来记录参数?注意我使用的是Python 2.7.
下面的Go代码读入10,000记录CSV(时间戳times和浮点数values),对数据运行一些操作,然后将原始值写入另一个CSV以及另外一列score.然而它非常慢(即几小时,但大部分都是这样calculateStuff())而且我很好奇,如果我可以处理的CSV读/写有任何低效率.
package main
import (
"encoding/csv"
"log"
"os"
"strconv"
)
func ReadCSV(filepath string) ([][]string, error) {
csvfile, err := os.Open(filepath)
if err != nil {
return nil, err
}
defer csvfile.Close()
reader := csv.NewReader(csvfile)
fields, err := reader.ReadAll()
return fields, nil
}
func main() {
// load data csv
records, err := ReadCSV("./path/to/datafile.csv")
if err != nil {
log.Fatal(err)
}
// write results to a new csv
outfile, err := os.Create("./where/to/write/resultsfile.csv"))
if …Run Code Online (Sandbox Code Playgroud) 当查询API的HTTP响应代码不是200时,我想提出一个Python标准异常,但是我应该使用什么特定的异常?现在我提出一个OSError:
if response.status_code != 200:
raise OSError("Response " + str(response.status_code)
+ ": " + response.content)
Run Code Online (Sandbox Code Playgroud)
如何从PyPi 上列出的包中下载特定的轮子?我假设我会使用wgetor curl,但我不确定要使用哪些参数。
我正在尝试将pandas DataFrame(单列)附加到现有的CSV,就像这篇文章一样,但它不起作用!相反,我的列被添加到csv的底部,并反复重复(csv >>行的大小为列).这是我的代码:
with open(outputPath, "a") as resultsFile:
print len(scores)
scores.to_csv(resultsFile, header=False)
print resultsFile
Run Code Online (Sandbox Code Playgroud)
终端输出:4032
<open file '/Users/alavin/nta/NAB/results/numenta/artificialWithAnomaly/numenta_art_load_balancer_spikes.csv', mode 'a' at 0x1088686f0>
先感谢您!